旧的I/O类库中有三个类被修改了,用以产生FileChannel。来看看他们的例子:
package com.wjy.nio; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class GetChannel { private static final int BSIZE=1024; public static void main(String args[]){ try { FileChannel fcChannel=new FileOutputStream(new File("./file/out.txt")).getChannel(); fcChannel.write(ByteBuffer.wrap("Some text ".getBytes())); fcChannel.close(); fcChannel=new RandomAccessFile(new File("./file/out.txt"), "rw").getChannel(); fcChannel.position(fcChannel.size()); //移动到文件末尾,以添加内容 fcChannel.write(ByteBuffer.wrap("randomaccessfile".getBytes())); fcChannel.close(); fcChannel=new FileInputStream(new File("./file/out.txt")).getChannel(); ByteBuffer buff=ByteBuffer.allocate(BSIZE); fcChannel.read(buff); buff.flip(); //这句很重要,没有这句出不来结果。一旦调用read()来向ByteBuffer存储字节,就必须调用缓冲器上的flip(),让它做好让别人读取字节的准备。 while(buff.hasRemaining()){ System.out.print((char)buff.get()); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
/*OutPut Some text randomaccessfile *///
号外:一旦调用read()来向ByteBuffer存储字节,就必须调用缓冲器上的flip(),让它做好让别人读取字节的准备。
请注意:如果打算使用缓冲器执行进一步的read()操作,我们也应该必须调用clead()为下次read()做好准备。所以,正常的过程应该是:
while(in.read(buffer)!=-1)
{
buffer.flip(); //准备好写
out.write(buffer);
buffer.clear(); //准备好读
}
相关推荐
Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...
总的来说,Java I/O、NIO和NIO.2是Java平台中处理输入输出的三个重要阶段,它们各自有其特点和适用范围。学习和运用这些技术,能够帮助开发者更好地处理数据交互,提高程序的性能和可扩展性。通过阅读《Java I:O, ...
Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...
Java I/O系统是Java编程语言中的一个重要组成部分,它允许程序进行输入输出操作,与外部世界进行数据交互。在Java中,I/O系统基于流的概念,流可以被视为数据的流动渠道,既可以用来读取数据(输入流),也可以写入...
标题“NIO与I/O的区别”涉及到的是Java编程中关于输入/输出(I/O)模型与新I/O(New I/O,NIO)模型的对比。这两种模型在处理数据流时有不同的特性和适用场景,理解它们的区别对于优化Java程序的性能至关重要。 I/O...
随着JDK 1.4的发布,新的I/O(nio)包被添加进来,旨在提高性能和提供更高级的功能,这个包被称为“新I/O”,尽管至今仍被广泛使用。 `File`类是处理文件和目录的基础,它并不直接进行文件的读写,而是作为文件路径或...
Java I/O 流是Java平台中的一个重要组成部分,它在处理数据输入和输出方面扮演着核心角色。I/O流系统提供了一种标准化的方式来读取、写入数据,无论是从磁盘、网络、内存还是其他类型的输入输出设备。在这个思维导图...
在JDK 6.0之前,Java主要使用传统的I/O(InputStream和OutputStream)模型,这种模型基于阻塞I/O,即当一个线程等待数据读取或写入时,会被阻塞,无法执行其他任务,这在处理大量并发连接时效率较低。 新I/O(NIO)...
- 新型I/O(New I/O,NIO):Java 1.4引入的非阻塞I/O模型,包括FileChannel、Selector和Pipe等组件,提高了并发性能。 8. **网络通信**: - Socket编程:创建TCP/IP套接字连接,发送和接收数据。 - ...
在Android系统中,I/O(Input/Output)操作是应用程序与设备之间交换数据的基础。Android提供了多种I/O机制,使得开发者能够有效地读写文件、处理流数据以及与网络通信。以下将详细介绍Android I/O操作的相关知识点...
新输入输出(NIO)是Java 1.4版本中引入的一个重要改进,它提供了高效、面向块的I/O操作,弥补了传统I/O(基于流的I/O)的性能限制。NIO库的设计目标是允许Java程序员实现高速I/O而无需编写本机代码,通过将耗时的I/...
描述:本文将全面介绍Java中的新输入输出(NIO),一个自JDK 1.4版本引入的重要库,旨在提供高速、块导向的输入输出处理能力,相较于传统的Java I/O包,NIO通过数据缓冲和块处理技术充分利用了底层优化,无需依赖...
Java NIO(New I/O,非阻塞I/O)是Java提供的一种用于替代标准Java I/O ...Java NIO作为Java平台上的一个重要I/O库,它为开发者提供了更多控制底层网络和文件I/O操作的能力,尤其是在需要高性能和高并发处理的场景中。
Java的输入/输出(Input/Output,简称I/O)系统是Java编程中不可或缺的一部分,它提供了与外部设备交互的能力,包括磁盘、网络、键盘、显示器等。理解Java的I/O系统不仅涉及基本的流(Stream)概念,还包括缓冲、...
经过对Flume FileChannel相关源码的分析,导致FileChannel吞吐率下降的主要原因集中于事务的提交过程——commit
Java NIO,全称New Input/Output,是Java标准库在JDK 1.4版本引入的一个重要特性,旨在提供一种高效、面向块的I/O模型,以替代传统的基于流的I/O。NIO库的设计目标是允许Java程序员实现高性能的I/O操作,而无需依赖...