`

一个关于NIO的小程序

    博客分类:
  • Java
阅读更多

随便看看:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class BufferTest {
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//原始文件
		FileInputStream fin = new FileInputStream("test.txt");
		FileChannel fc = fin.getChannel();
		
		//新建缓存并将原始文件的内容写入缓存
		ByteBuffer bbf = ByteBuffer.allocate(1024);
		fc.read(bbf);
		
		//拷贝到此文件
		FileOutputStream fout = new FileOutputStream("result.txt");
		FileChannel fc1 = fout.getChannel();
		
		//将之前的缓存中的信息写入到新文件的channel里
		bbf.flip();//必不可少,否则新文件里面的内容为空
		fc1.write(bbf);
	}
}

 

 

从缓冲区buffer里取出得到一个缓冲区分片slice:

buffer.position( 3 );
buffer.limit( 7 );
ByteBuffer slice = buffer.slice();

 

 

字符集:

 

在打开相应的文件、将输入数据读入名为 inputDataByteBuffer 之后,我们的程序必须创建 ISO-8859-1 (Latin1) 字符集的一个实例:


Charset latin1 = Charset.forName( "ISO-8859-1" );

然后,创建一个解码器(用于读取)和一个编码器 (用于写入):


CharsetDecoder decoder = latin1.newDecoder();
CharsetEncoder encoder = latin1.newEncoder();

为了将字节数据解码为一组字符,我们把 ByteBuffer 传递给 CharsetDecoder,结果得到一个 CharBuffer


CharBuffer cb = decoder.decode( inputData );

如果想要处理字符,我们可以在程序的此处进行。但是我们只想无改变地将它写回,所以没有什么要做的。

要写回数据,我们必须使用 CharsetEncoder 将它转换回字节:


ByteBuffer outputData = encoder.encode( cb );

在转换完成之后,我们就可以将数据写到文件中了。

分享到:
评论

相关推荐

    mina框架--MINA框架是对java的NIO包的一个封装

    MINA(Multipurpose Infrastructure for Network Applications)框架是Apache软件基金会的一个开源项目,它提供了一种高级的、事件驱动的网络应用程序框架,用于简化基于Java的网络编程,特别是使用非阻塞I/O(Non-...

    JAVA-NIO-DEMO

    本示例"JAVA-NIO-DEMO"提供了关于Java NIO的实际应用,通过Anontion(注解)、Applet(小程序)和NIO的Demo,帮助开发者更深入地理解和掌握这些概念。 首先,让我们深入了解Java NIO。NIO的核心组件包括: 1. **...

    基于nio实现的多文件上传源码

    在Java编程领域,NIO(New IO)是一个重要的特性,它是Java 1.4版本引入的,用于替代标准的IO API。NIO提供了一种非阻塞I/O操作的方式,特别适用于处理大量的并发连接,例如在文件传输、网络通信等场景。本主题...

    NIO入门pdf分享

    NIO,全称New Input/Output,是从Java 1.4版本开始引入的一个新特性,它与传统的IO模型( Blocking I/O)相比,提供了更高效的数据传输方式。传统的IO基于流(Stream)和缓冲区(Buffer)操作,而NIO的核心在于通道...

    练练手,用mina2.0搭建一个nio客户端

    标题中的“练练手,用mina2.0搭建一个nio客户端”表明了本文将探讨如何使用Mina 2.0框架构建一个基于非阻塞I/O(NIO)的客户端应用。Mina是一个开源的Java框架,常用于开发高性能、高并发的网络通信应用,如TCP/IP和...

    java nio 读文件

    Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...

    NIO网络通讯编程

    5. NIO和BIO的区别:BIO是阻塞的,一个线程只能处理一个连接,当连接数增多时,线程数也随之增加,可能导致资源耗尽。而NIO是非阻塞的,通过选择器,一个线程可以处理多个连接,提高了系统资源利用率。 6. NIO在...

    NIO与零拷贝_javanio_nio和零拷贝_

    Java NIO(New IO)是Java 1.4引入的一个新特性,它是对传统IO模型的重大改进,提供了更高效的数据处理方式。NIO的核心概念包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。它允许多个输入/输出操作...

    nio4

    它们可以从一个地方读取数据,并向另一个地方写入数据,而无需关闭通道。例如,FileChannel可用于文件的读写,SocketChannel用于网络通信。 2. **缓冲区(Buffers)**:缓冲区是NIO的核心,它在读写操作中起到桥梁...

    java nio 包读取超大数据文件

    - **Channels**:用于表示IO源或目标的一个连接点。 - **Buffers**:用来存储数据的对象,是数据传输的载体。 - **Selectors**:多路复用器,用于监控多个Channel的状态变化,支持高效地处理大量并发连接。 - **...

    nio演示代码

    在Java编程领域,NIO(New Input/Output)是一个重要的概念,它为处理大量输入输出提供了更为高效的方式,尤其在处理大数据或者并发连接时。NIO与传统的IO模型(-blocking I/O)不同,传统IO基于缓冲区的读写,而NIO...

    新输入输出NIO

    **异步I/O(Asynchronous I/O)**是NIO的一个独特特性,它允许程序在等待I/O操作完成时继续执行其他任务。在Java中,这主要通过**AsynchronousChannelGroup**和**AsynchronousChannel**接口实现。异步I/O可以显著...

    android-socket-nio-master.zip

    "android-socket-nio-master.zip" 是一个关于Android中使用Socket结合NIO实现高效通信的项目,其目标是提高Socket通信的性能和处理大量并发连接的能力。 NIO(非阻塞I/O)是Java提供的一个替代传统I/O的API,主要...

    NIO.rar_NIO_java nio

    缓冲区是NIO的另一个关键组件,用于在通道和应用程序之间存储数据。Java NIO提供了多个缓冲区类,如ByteBuffer、CharBuffer、IntBuffer等,对应不同的数据类型。缓冲区具有容量、位置和限制等属性,通过使用缓冲区...

    nioserver.rar_NIO_java nio

    而NIO通过一个线程管理多个通道,避免了线程创建和销毁的开销,降低了系统资源的消耗。 在Java NIO库中,FileChannel用于文件操作,SocketChannel和ServerSocketChannel分别对应网络的客户端和服务器端通信。其中,...

    JavaNIO.pdf

    缓冲区是Java NIO中非常重要的一个概念,它是特定基本类型元素的线性有限序列。缓冲区有四个基本属性:容量、限制、位置和标记。 * 容量(Capacity):缓冲区中元素的数量,不能为负数,不能更改。 * 限制(Limit)...

    Java NIO 中文版.rar

    而Java NIO引入了Channel(通道)和Buffer(缓冲区)的概念,以及Selector(选择器)机制,使得一个线程可以同时监控多个通道的事件,大大提高了处理效率。以下是NIO的主要组件和特性: 1. **Channel**:类似于流,...

Global site tag (gtag.js) - Google Analytics