`
googlelc
  • 浏览: 56695 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java学习笔记(三十七)java新IO之Buffer

 
阅读更多

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学习笔记.rar

    "IO-黑马程序员Java学习笔记"这个压缩包包含了关于Java IO的详细教程,可以帮助我们深入理解这个关键领域。下面将根据提供的文件名来解析可能包含的知识点。 1. **IO.md**: 这个文件很可能是Markdown格式的学习...

    java学习笔记之Java-IO操作共19页.pdf.zi

    【Java IO操作详解】 在Java编程中,IO(Input/Output)操作是处理数据输入与输出的核心技术。Java-IO操作共19页的笔记详细介绍了这一关键领域,旨在帮助...这19页的学习笔记将是你掌握Java IO操作的重要参考资料。

    阿里P8 架构师整理Java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...

    java io流学习笔记1

    Java IO流是Java平台中用于处理输入输出操作的重要机制,它是Java编程中不可或缺的一部分。在本文中,我们将深入探讨Java IO流的基本概念、类型、以及它们在实际开发中的应用。 一、基本概念 Java IO流可以理解为...

    凯达Java学习笔记

    【凯达Java学习笔记】是一份综合性的Java编程学习资源,涵盖了从基础到进阶的各种主题,旨在帮助初学者和有经验的开发者提升Java技术能力。这份笔记可能包含了大量的实例代码、理论解释以及最佳实践,使得学习过程...

    Java公司培训经典学习笔记

    Java公司培训经典学习笔记是针对Java编程语言进行深入学习的一份宝贵资料,涵盖了从基础到高级的诸多知识点,旨在帮助开发者提升技能,适应企业级项目开发的需求。以下将详细阐述这些笔记中的关键点: 1. **Java...

    java学习笔记之大鹏JAVA终级总结

    Java学习笔记之大鹏JAVA终级总结,是针对Java编程语言深入学习和面试准备的一份综合资料。这份总结涵盖了从基础知识到高级概念的多个方面,旨在帮助初学者理解和掌握Java的核心概念,同时解决面试中可能出现的关键...

    java学习笔记-老师的课程笔记

    Java学习笔记是初学者探索Java编程世界的宝贵资源。这份由老师精心整理的课程笔记涵盖了Java的基础到进阶知识,旨在帮助新手快速理解并掌握这门强大的面向对象编程语言。笔记内容可能包括但不限于以下方面: 一、...

    张龙JAVA圣思园笔记

    笔记中可能讲解了InputStream和OutputStream抽象类,以及BufferedReader、PrintWriter等具体类的使用,还可能涉及到了NIO(New IO)框架,如Channel、Buffer、Selector等概念。 2. **线程**: Java对多线程的支持...

    java jdk 5学习笔记

    Java JDK 5是Java开发工具集的...在"java jdk 5学习笔记"中,你可能会找到这些特性的详细使用示例和实践教程,帮助你深入理解和应用这些知识。通过学习和实践,你可以提升自己的Java编程技能,更好地应对各种开发场景。

    Java 客户端服务器程序 学习笔记

    在这个“Java客户端服务器程序学习笔记”中,我们将深入探讨这一主题,包括如何设计、实现和交互这两个关键组件。 首先,客户端是用户与系统进行交互的部分,它发送请求到服务器并接收响应。服务器端则处理这些请求...

    Java所有课程超全学习笔记

    本学习笔记涵盖了Java的所有基础知识,旨在帮助初学者及有经验的开发者深入理解Java的核心概念和技术。 一、Java基础 1.1 Java环境搭建:安装JDK(Java Development Kit),设置环境变量PATH和JAVA_HOME,确保能够...

    Java学习超强笔记

    以上只是Java学习笔记中可能涉及的部分知识点,实际上,完整的笔记还会包含更深入的Java特性,如注解、模块系统、JDBC数据库访问、Spring框架等内容,以及实际项目开发中的最佳实践。这份笔记是初级Java程序员系统...

    javaNIO学习笔记

    ### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...

    良葛格Java JDK 5.0学习笔记

    在IO流方面,NIO(New IO)在Java 5.0中被引入,提供了一种基于通道(Channel)和缓冲区(Buffer)的I/O模型,相比于传统的流模型,NIO具有更好的非阻塞和选择器特性,适合处理大量并发连接。 最后,JDK 5.0对日期...

    JAVA NIO学习笔记.docx

    Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...

    李兴华Java笔记

    《李兴华Java笔记》是一份综合性的学习资料,涵盖了Java编程语言的基础到高级主题,适合初学者和有一定经验的开发者。这份笔记可能是作者李兴华个人教学或学习经验的结晶,但需注意,它可能并非针对Java 8版本特别...

    JAVA源码笔记

    这份"JAVA源码笔记"集合了作者从零开始学习Java时,通过观看网络视频并结合实践所整理的一系列源码和学习心得。这不仅有助于加深对Java语言的理解,也能帮助初学者建立良好的编程思维。 首先,我们要明白Java是一种...

    java面试宝典与相关学习笔记

    这份"java面试宝典与相关学习笔记"正是为此目的而准备的资源集合。 1. **基础语法与数据类型** - Java的基础语法包括变量声明、条件语句(if-else)、循环结构(for、while、do-while)、方法定义等。 - 数据类型...

    Java开发详解.zip

    000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...

Global site tag (gtag.js) - Google Analytics