知识大全 Merlin 的新 I/O 缓冲区的输入和输出
Posted 操作
篇首语:读书是最好的学习。追随伟大人物的思想,是最富有趣味的一门科学。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Merlin 的新 I/O 缓冲区的输入和输出相关的知识,希望对你有一定的参考价值。
Merlin 的魔力:Merlin 的新 I/O 缓冲区的输入和输出 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Merlin 的魔力 Merlin 的新 I/O 缓冲区的输入和输出 作者: Merlin 的魔力 Merlin 的新 I/O 缓冲区的输入和输出 英文原文 内容: 缓冲区基础 缓冲区类型 直接 vs 间接 内存映射文件 结束语 参考资料 关于作者 对本文的评价 相关内容 Merlin 给 Java 平台带来了非阻塞 I/O Working XML: Wrestling with Java NIO T彻底转变流 第 部分 优化 Java 内部 I/O Merlin的魔力 developerWorks Toolbox subscription 在 Java 专区还有 工具与产品 代码与组件 所有文章 实用技巧 了解如何操作 J SE 的新 I/O 包 级别 初级 John Zukowski 总裁 JZ Ventures 公司 年 月 Merlin 的魔力 中 常驻 Java 编程专家 John Zukowski 展示了如何操作那些数据缓冲区来执行如读/写原语这样的任务以及如何使用内存映射文件 在以后的文章里 他将把这里所提到的概念扩展到套接字通道的使用 Java 平台标准版(Java Platform Standard Edition J SE) 对 Java 平台的 I/O 处理能力做了大量更改 它不仅用流到流的链接方式继续支持以前 J SE 发行版的基于流的 I/O 操作 而且 Merlin 还添加了新的功能 — 称之为新 I/O 类(NIO) 现在这些类位于 java nio 包中 I/O 执行输入和输出操作 将数据从文件或系统控制台等传送至或传送出应用程序 (有关 Java I/O 的其它信息 请参阅 参考资料 缓冲区基础 抽象的 Buffer java nio 包支持缓冲区的基础 Buffer 的工作方式就象内存中用于读写基本数据类型的 RandomAccessFile RandomAccessFile 一样 使用 Buffer 所执行的下一个操作(读/写)在当前某个位置发生 执行这两个操作中的任一个都会改变那个位置 所以在写操作之后进行读操作不会读到刚才所写的内容 而会读到刚才所写内容之后的数据 Buffer 提供了四个指示方法 用于访问线姓结构(从最高值到最低值) capacity() 表明缓冲区的大小 limit() 告诉您到目前为止已经往缓冲区填了多少字节 或者让您用 :limit(int newLimit) 来改变这个限制 position() 告诉您当前的位置 以执行下一个读/写操作 mark() 为了稍后用 reset() 进行重新设置而记住某个位置 缓冲区的基本操作是 get() put() 然而 这些方法在子类中都是针对每种数据类型的特定方法 为了说明这一情况 让我们研究一个简单示例 该示例演示了从同一个缓冲区读和写一个字符 在清单 中 flip() 方法交换限制和位置 然后将位置置为 并废弃标记 让您读刚才所写的数据 清单 读/写示例 import java nio *; CharBuffer buff = ; buff put( A ); buff flip(); char c = buff get(); System out println( An A: + c); 现在让我们研究一些具体的 Buffer 子类 缓冲区类型 Merlin 具有 种特定的 Buffer 类型 每种类型对应着一个基本数据类型(不包括 boolean) ByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer 在本文后面 我将讨论第 种类型 MappedByteBuffer 它用于内存映射文件 如果您必须使用的类型不是这些基本类型 则可以先从 ByteBuffer 获得字节类型 然后将其转换成 Object 或其它任何类型 正如前面所提到的 每个缓冲区包含 get() put() 方法 它们可以提供类型安全的版本 通常 需要重载这些 get() put() 方法 例如 有了 CharBuffer 可以用 get() 获得下一个字符 用 get(int index) 获得某个特定位置的字符 或者用 get(char[] destination) 获得一串字符 静态方法也可以创建缓冲区 因为不存在构造函数 那么 仍以 CharBuffer 为例 用 CharBuffer wrap(aString) 可以将 String 对象转换成 CharBuffer 为了演示 清单 接受第一个命令行参数 将它转换成 CharBuffer 并显示参数中的每个字符 清单 CharBuffer 演示 import java nio *; public class ReadBuff public static void main(String args[]) if (args length != ) CharBuffer buff = CharBuffer wrap(args[ ]); for (int i= n=buff length(); i 请注意 这里我使用了 get() 而没有使用 get(index) 我这样做的原因是 在每次执行 get() 操作之后 位置都会移动 所以不需要手工来声明要检索的位置 直接 vs 间接 既然已经了解了典型的缓冲区 那么让我们研究直接缓冲区与间接缓冲区之间的差别 在创建缓冲区时 可以要求创建直接缓冲区 创建直接缓冲区的成本要比创建间接缓冲区高 但这可以使运行时环境直接在该缓冲区上进行较快的本机 I/O 操作 因为创建直接缓冲区所增加的成本 所以直接缓冲区只用于长生存期的缓冲区 而不用于短生存期 一次姓且用完就丢弃的缓冲区 而且 只能在 ByteBuffer 这个级别上创建直接缓冲区 如果希望使用其它类型 则必须将 Buffer 转换成更具体的类型 为了演示 清单 中代码的行为与清单 的行为一样 但清单 使用直接缓冲区 清单 列出网络接口 import java nio *; public class ReadDirectBuff public static void main(String args[]) if (args length != ) String arg = args[ ]; int size = arg length(); ByteBuffer byteBuffer = ByteBuffer allocateDirect(size* ); CharBuffer buff = byteBuffer asCharBuffer(); buff put(arg); buff rewind(); for (int i= n=buff length(); i 在上面的代码中 请注意 不能只是将 String 包装在直接 ByteBuffer 中 必须首先创建一个缓冲区 先填充它 然后将位置倒回起始点 这样才能从头读 还要记住 字符长度是字节长度的两倍 因此示例中会有 size* 内存映射文件 第 种 Buffer MappedByteBuffer 只是一种特殊的 ByteBuffer MappedByteBuffer 将文件所在区域直接映射到内存 通常 该区域包含整个文件 但也可以只映射部分文件 所以 必须指定要映射文件的哪部分 而且 与其它 Buffer 对象一样 这里没有构造函数 必须让 java nio channels FileChannel map() 方法来获取 MappedByteBuffer 此外 无需过多涉及通道就可以用 getChannel() 方法从 FileInputStream FileOutputStream FileChannel 通过从命令行传入文件名来读取文本文件的内容 清单 显示了 MappedByteBuffer 清 cha138/Article/program/Java/Javascript/201311/25294相关参考
试叙述就地I/O单元的组成及各部分作用。参考答案:控制系统的就地I/O单元一般分散在多个I/O机柜中,每个I/O机柜包括有适配器模件、电源冗余模件和各类输入输出模件。就地I/O柜的主体是各类输入输出模
Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我
JavaIO的性能可以使用标准的缓冲类提高 如果要求从磁盘上读取数据它会试图读取内存中已有的数据如果代码希望向磁盘写一些东西它可能在完成写操作前将输出在内存中存放一段时间以等待更多的数据
执行程序时,读写的是输入/输出映像寄存器的值,而不是直接对实际的I/O点进行操作,这样做有以下好处: (1 整个程序执行阶段各输入继电器的状态是固定的,程序执行完后再用输出映像寄存器的值更新所有
执行程序时,读写的是输入/输出映像寄存器的值,而不是直接对实际的I/O点进行操作,这样做有以下好处: (1 整个程序执行阶段各输入继电器的状态是固定的,程序执行完后再用输出映像寄存器的值更新所有
Java中的缓冲区 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果将同步I/O方式下的数据传
关于ROM存储器(Read Only Memory),下列说法正确的是()
关于ROM存储器(ReadOnlyMemory),下列说法正确的是()A、存储的内容在联机操作时只能读出而不能写入或被修改B、不能作为输入缓冲区,但能作为输出缓冲区。C、能作为输入缓冲区,但不能作为输
关于ROM存储器(Read Only Memory),下列说法正确的是()
关于ROM存储器(ReadOnlyMemory),下列说法正确的是()A、存储的内容在联机操作时只能读出而不能写入或被修改B、不能作为输入缓冲区,但能作为输出缓冲区。C、能作为输入缓冲区,但不能作为输
JavaIO之有缓冲的文本输入 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 输入就是Input
I/O柜端子排拆线接线作业的危险点和控制措施如下:步骤或活动:I/O柜端子拆、接线危险点工具不合格或使用不当(伤害类型:触电)控制措施1、使用工具前应进行检查,不完整的工具不准使用。2、认真检查仪器仪