`

旧的I/O类库中有三个类被赋予了产生FileChannel的能力

 
阅读更多

旧的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

    Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...

    Java I/O, NIO and NIO.2

    总的来说,Java I/O、NIO和NIO.2是Java平台中处理输入输出的三个重要阶段,它们各自有其特点和适用范围。学习和运用这些技术,能够帮助开发者更好地处理数据交互,提高程序的性能和可扩展性。通过阅读《Java I:O, ...

    深入分析 Java I/O 的工作机制(转载)

    Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...

    Java I/O系统

    Java I/O系统是Java编程语言中的一个重要组成部分,它允许程序进行输入输出操作,与外部世界进行数据交互。在Java中,I/O系统基于流的概念,流可以被视为数据的流动渠道,既可以用来读取数据(输入流),也可以写入...

    NIO与I/O的区别

    标题“NIO与I/O的区别”涉及到的是Java编程中关于输入/输出(I/O)模型与新I/O(New I/O,NIO)模型的对比。这两种模型在处理数据流时有不同的特性和适用场景,理解它们的区别对于优化Java程序的性能至关重要。 I/O...

    外文翻译—Java(译文-英文).doc

    随着JDK 1.4的发布,新的I/O(nio)包被添加进来,旨在提高性能和提供更高级的功能,这个包被称为“新I/O”,尽管至今仍被广泛使用。 `File`类是处理文件和目录的基础,它并不直接进行文件的读写,而是作为文件路径或...

    Javaio流思维导图

    Java I/O 流是Java平台中的一个重要组成部分,它在处理数据输入和输出方面扮演着核心角色。I/O流系统提供了一种标准化的方式来读取、写入数据,无论是从磁盘、网络、内存还是其他类型的输入输出设备。在这个思维导图...

    jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)

    在JDK 6.0之前,Java主要使用传统的I/O(InputStream和OutputStream)模型,这种模型基于阻塞I/O,即当一个线程等待数据读取或写入时,会被阻塞,无法执行其他任务,这在处理大量并发连接时效率较低。 新I/O(NIO)...

    Java.I.O.2nd.Edition

    - 新型I/O(New I/O,NIO):Java 1.4引入的非阻塞I/O模型,包括FileChannel、Selector和Pipe等组件,提高了并发性能。 8. **网络通信**: - Socket编程:创建TCP/IP套接字连接,发送和接收数据。 - ...

    Android IO

    在Android系统中,I/O(Input/Output)操作是应用程序与设备之间交换数据的基础。Android提供了多种I/O机制,使得开发者能够有效地读写文件、处理流数据以及与网络通信。以下将详细介绍Android I/O操作的相关知识点...

    新输入输出NIO

    新输入输出(NIO)是Java 1.4版本中引入的一个重要改进,它提供了高效、面向块的I/O操作,弥补了传统I/O(基于流的I/O)的性能限制。NIO库的设计目标是允许Java程序员实现高速I/O而无需编写本机代码,通过将耗时的I/...

    Getting started with new io

    描述:本文将全面介绍Java中的新输入输出(NIO),一个自JDK 1.4版本引入的重要库,旨在提供高速、块导向的输入输出处理能力,相较于传统的Java I/O包,NIO通过数据缓冲和块处理技术充分利用了底层优化,无需依赖...

    JavaNIO.pdf

    Java NIO(New I/O,非阻塞I/O)是Java提供的一种用于替代标准Java I/O ...Java NIO作为Java平台上的一个重要I/O库,它为开发者提供了更多控制底层网络和文件I/O操作的能力,尤其是在需要高性能和高并发处理的场景中。

    彻底明白Java的IO系统

    Java的输入/输出(Input/Output,简称I/O)系统是Java编程中不可或缺的一部分,它提供了与外部设备交互的能力,包括磁盘、网络、键盘、显示器等。理解Java的I/O系统不仅涉及基本的流(Stream)概念,还包括缓冲、...

    flume中的FileChannel的优化

    经过对Flume FileChannel相关源码的分析,导致FileChannel吞吐率下降的主要原因集中于事务的提交过程——commit

    JavaNIO想详解1

    Java NIO,全称New Input/Output,是Java标准库在JDK 1.4版本引入的一个重要特性,旨在提供一种高效、面向块的I/O模型,以替代传统的基于流的I/O。NIO库的设计目标是允许Java程序员实现高性能的I/O操作,而无需依赖...

Global site tag (gtag.js) - Google Analytics