知识大全 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

相关参考

试叙述就地IO单元的组成及各部分作用。

试叙述就地I/O单元的组成及各部分作用。参考答案:控制系统的就地I/O单元一般分散在多个I/O机柜中,每个I/O机柜包括有适配器模件、电源冗余模件和各类输入输出模件。就地I/O柜的主体是各类输入输出模

知识大全 非阻塞I/O的缓冲区(Buffer)

Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我

知识大全 使用缓冲提高输入/输出的性能

  JavaIO的性能可以使用标准的缓冲类提高    如果要求从磁盘上读取数据它会试图读取内存中已有的数据如果代码希望向磁盘写一些东西它可能在完成写操作前将输出在内存中存放一段时间以等待更多的数据  

扫描工作方式有什么优点?

  执行程序时,读写的是输入/输出映像寄存器的值,而不是直接对实际的I/O点进行操作,这样做有以下好处:  (1 整个程序执行阶段各输入继电器的状态是固定的,程序执行完后再用输出映像寄存器的值更新所有

扫描工作方式有什么优点?

  执行程序时,读写的是输入/输出映像寄存器的值,而不是直接对实际的I/O点进行操作,这样做有以下好处:  (1 整个程序执行阶段各输入继电器的状态是固定的,程序执行完后再用输出映像寄存器的值更新所有

知识大全 Java中的缓冲区

Java中的缓冲区  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果将同步I/O方式下的数据传

关于ROM存储器(Read Only Memory),下列说法正确的是()

关于ROM存储器(ReadOnlyMemory),下列说法正确的是()A、存储的内容在联机操作时只能读出而不能写入或被修改B、不能作为输入缓冲区,但能作为输出缓冲区。C、能作为输入缓冲区,但不能作为输

关于ROM存储器(Read Only Memory),下列说法正确的是()

关于ROM存储器(ReadOnlyMemory),下列说法正确的是()A、存储的内容在联机操作时只能读出而不能写入或被修改B、不能作为输入缓冲区,但能作为输出缓冲区。C、能作为输入缓冲区,但不能作为输

知识大全 Java IO之有缓冲的文本输入

JavaIO之有缓冲的文本输入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  输入就是Input

I/O柜端子排拆线接线作业的危险点和控制措施

I/O柜端子排拆线接线作业的危险点和控制措施如下:步骤或活动:I/O柜端子拆、接线危险点工具不合格或使用不当(伤害类型:触电)控制措施1、使用工具前应进行检查,不完整的工具不准使用。2、认真检查仪器仪