java新IO之Buffer
1、什么是java新IO
在jdk1.4之后呢,为了提高IO操作的性能,提供了一个新的开发包,NIO,此
包定义在java.nio.*中。
在java中,已有的IO操作大部分都属于阻塞的操作,例如,键盘输入数据,
必须一直等待用户输入数据,否则程序不能继续执行。另外,还有socket程
序中服务器必须通过accept()方法等待用户连接,这就造成了大量的系统
资源的浪费。所以呢在jdk1.4之后引入了新IO,在整个新IO的操作基本上都
是使用缓冲区来完成的。
2、Buffer-->缓冲区
在基本io操作中,所有的操作都是以流的形式完成的,但是在新IO中所有的
操作都是要使用到Buffer,所有的读写操作都是通过缓冲区完成的。
2、1 Buffer:
是一个线性的,有序的数据集,只能容纳某种特定类型数据。
在jdk api 1.6中是这样定义的:
public abstract class Bufferextends Object一个用于特定基本类型数据
的容器。
缓冲区是特定基本类型元素的线性有限序列。除内容外,缓冲区的基本属性
还包括容量、限制和位置:
缓冲区的容量 是它所包含的元素的数量。缓冲区的容量不能为负并且不能更
改。
缓冲区的限制 是第一个不应该读取或写入的元素的索引。缓冲区的限制不能
为负,并且不能大于其容量。
缓冲区的位置 是下一个要读取或写入的元素的索引。缓冲区的位置不能为负
,并且不能大于其限制。
对于每个非 boolean 基本类型,此类都有一个子类与之对应。
2、2 Buffer的清除、反转和重绕
除了访问位置、限制、容量值的方法以及做标记和重置的方法外,此类还定
义了以下可对缓冲区进行的操作:
clear() 使缓冲区为一系列新的通道读取或相对放置 操作做好准备:它将限
制设置为容量大小,将位置设置为 0。
flip() 使缓冲区为一系列新的通道写入或相对获取 操作做好准备:它将限
制设置为当前位置,然后将位置设置为 0。
rewind() 使缓冲区为重新读取已包含的数据做好准备:它使限制保持不变,
将位置设置为 0
2、3 线程安全
多个当前线程使用缓冲区是不安全的。如果一个缓冲区由不止一个线程使用
,则应该通过适当的同步来控制对该缓冲区的访问。
2、4 调用链
指定此类中的方法返回调用它们的缓冲区(否则它们不会返回任何值)。此
操作允许将方法调用组成一个链;例如,语句序列
b.flip();
b.position(23);
b.limit(42);可以由以下更紧凑的一个语句代替
b.flip().position(23).limit(42);
3、Buffer中的方法
3、1 position方法
@ :public final int position()返回此缓冲区的位置。
@ :public final Buffer position(int newPosition)
设置此缓冲区的位置。如果标记已定义且大于新的位置,则丢弃该标记。
3、2 limit方法
@ :public final int limit()返回此缓冲区的限制。
@ :public final Buffer limit(int newLimit)
设置此缓冲区的限制。如果位置大于新的限制,则将它设置为新限制。如果
标记已定义且大于新限制,则丢弃该标记。
3、3 capacity 容量
public final int capacity() 返回此缓冲区的容量。
分享到:
相关推荐
"IO-黑马程序员Java学习笔记"这个压缩包包含了关于Java IO的详细教程,可以帮助我们深入理解这个关键领域。下面将根据提供的文件名来解析可能包含的知识点。 1. **IO.md**: 这个文件很可能是Markdown格式的学习...
【Java IO操作详解】 在Java编程中,IO(Input/Output)操作是处理数据输入与输出的核心技术。Java-IO操作共19页的笔记详细介绍了这一关键领域,旨在帮助...这19页的学习笔记将是你掌握Java IO操作的重要参考资料。
### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...
Java IO流是Java平台中用于处理输入输出操作的重要机制,它是Java编程中不可或缺的一部分。在本文中,我们将深入探讨Java IO流的基本概念、类型、以及它们在实际开发中的应用。 一、基本概念 Java IO流可以理解为...
【凯达Java学习笔记】是一份综合性的Java编程学习资源,涵盖了从基础到进阶的各种主题,旨在帮助初学者和有经验的开发者提升Java技术能力。这份笔记可能包含了大量的实例代码、理论解释以及最佳实践,使得学习过程...
Java公司培训经典学习笔记是针对Java编程语言进行深入学习的一份宝贵资料,涵盖了从基础到高级的诸多知识点,旨在帮助开发者提升技能,适应企业级项目开发的需求。以下将详细阐述这些笔记中的关键点: 1. **Java...
Java学习笔记之大鹏JAVA终级总结,是针对Java编程语言深入学习和面试准备的一份综合资料。这份总结涵盖了从基础知识到高级概念的多个方面,旨在帮助初学者理解和掌握Java的核心概念,同时解决面试中可能出现的关键...
Java学习笔记是初学者探索Java编程世界的宝贵资源。这份由老师精心整理的课程笔记涵盖了Java的基础到进阶知识,旨在帮助新手快速理解并掌握这门强大的面向对象编程语言。笔记内容可能包括但不限于以下方面: 一、...
笔记中可能讲解了InputStream和OutputStream抽象类,以及BufferedReader、PrintWriter等具体类的使用,还可能涉及到了NIO(New IO)框架,如Channel、Buffer、Selector等概念。 2. **线程**: Java对多线程的支持...
Java JDK 5是Java开发工具集的...在"java jdk 5学习笔记"中,你可能会找到这些特性的详细使用示例和实践教程,帮助你深入理解和应用这些知识。通过学习和实践,你可以提升自己的Java编程技能,更好地应对各种开发场景。
在这个“Java客户端服务器程序学习笔记”中,我们将深入探讨这一主题,包括如何设计、实现和交互这两个关键组件。 首先,客户端是用户与系统进行交互的部分,它发送请求到服务器并接收响应。服务器端则处理这些请求...
本学习笔记涵盖了Java的所有基础知识,旨在帮助初学者及有经验的开发者深入理解Java的核心概念和技术。 一、Java基础 1.1 Java环境搭建:安装JDK(Java Development Kit),设置环境变量PATH和JAVA_HOME,确保能够...
以上只是Java学习笔记中可能涉及的部分知识点,实际上,完整的笔记还会包含更深入的Java特性,如注解、模块系统、JDBC数据库访问、Spring框架等内容,以及实际项目开发中的最佳实践。这份笔记是初级Java程序员系统...
### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...
在IO流方面,NIO(New IO)在Java 5.0中被引入,提供了一种基于通道(Channel)和缓冲区(Buffer)的I/O模型,相比于传统的流模型,NIO具有更好的非阻塞和选择器特性,适合处理大量并发连接。 最后,JDK 5.0对日期...
Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...
《李兴华Java笔记》是一份综合性的学习资料,涵盖了Java编程语言的基础到高级主题,适合初学者和有一定经验的开发者。这份笔记可能是作者李兴华个人教学或学习经验的结晶,但需注意,它可能并非针对Java 8版本特别...
这份"JAVA源码笔记"集合了作者从零开始学习Java时,通过观看网络视频并结合实践所整理的一系列源码和学习心得。这不仅有助于加深对Java语言的理解,也能帮助初学者建立良好的编程思维。 首先,我们要明白Java是一种...
这份"java面试宝典与相关学习笔记"正是为此目的而准备的资源集合。 1. **基础语法与数据类型** - Java的基础语法包括变量声明、条件语句(if-else)、循环结构(for、while、do-while)、方法定义等。 - 数据类型...
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...