随便看看:
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();
字符集:
在打开相应的文件、将输入数据读入名为 inputData
的 ByteBuffer
之后,我们的程序必须创建 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(Multipurpose Infrastructure for Network Applications)框架是Apache软件基金会的一个开源项目,它提供了一种高级的、事件驱动的网络应用程序框架,用于简化基于Java的网络编程,特别是使用非阻塞I/O(Non-...
本示例"JAVA-NIO-DEMO"提供了关于Java NIO的实际应用,通过Anontion(注解)、Applet(小程序)和NIO的Demo,帮助开发者更深入地理解和掌握这些概念。 首先,让我们深入了解Java NIO。NIO的核心组件包括: 1. **...
在Java编程领域,NIO(New IO)是一个重要的特性,它是Java 1.4版本引入的,用于替代标准的IO API。NIO提供了一种非阻塞I/O操作的方式,特别适用于处理大量的并发连接,例如在文件传输、网络通信等场景。本主题...
NIO,全称New Input/Output,是从Java 1.4版本开始引入的一个新特性,它与传统的IO模型( Blocking I/O)相比,提供了更高效的数据传输方式。传统的IO基于流(Stream)和缓冲区(Buffer)操作,而NIO的核心在于通道...
标题中的“练练手,用mina2.0搭建一个nio客户端”表明了本文将探讨如何使用Mina 2.0框架构建一个基于非阻塞I/O(NIO)的客户端应用。Mina是一个开源的Java框架,常用于开发高性能、高并发的网络通信应用,如TCP/IP和...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...
5. NIO和BIO的区别:BIO是阻塞的,一个线程只能处理一个连接,当连接数增多时,线程数也随之增加,可能导致资源耗尽。而NIO是非阻塞的,通过选择器,一个线程可以处理多个连接,提高了系统资源利用率。 6. NIO在...
Java NIO(New IO)是Java 1.4引入的一个新特性,它是对传统IO模型的重大改进,提供了更高效的数据处理方式。NIO的核心概念包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。它允许多个输入/输出操作...
它们可以从一个地方读取数据,并向另一个地方写入数据,而无需关闭通道。例如,FileChannel可用于文件的读写,SocketChannel用于网络通信。 2. **缓冲区(Buffers)**:缓冲区是NIO的核心,它在读写操作中起到桥梁...
- **Channels**:用于表示IO源或目标的一个连接点。 - **Buffers**:用来存储数据的对象,是数据传输的载体。 - **Selectors**:多路复用器,用于监控多个Channel的状态变化,支持高效地处理大量并发连接。 - **...
在Java编程领域,NIO(New Input/Output)是一个重要的概念,它为处理大量输入输出提供了更为高效的方式,尤其在处理大数据或者并发连接时。NIO与传统的IO模型(-blocking I/O)不同,传统IO基于缓冲区的读写,而NIO...
**异步I/O(Asynchronous I/O)**是NIO的一个独特特性,它允许程序在等待I/O操作完成时继续执行其他任务。在Java中,这主要通过**AsynchronousChannelGroup**和**AsynchronousChannel**接口实现。异步I/O可以显著...
"android-socket-nio-master.zip" 是一个关于Android中使用Socket结合NIO实现高效通信的项目,其目标是提高Socket通信的性能和处理大量并发连接的能力。 NIO(非阻塞I/O)是Java提供的一个替代传统I/O的API,主要...
缓冲区是NIO的另一个关键组件,用于在通道和应用程序之间存储数据。Java NIO提供了多个缓冲区类,如ByteBuffer、CharBuffer、IntBuffer等,对应不同的数据类型。缓冲区具有容量、位置和限制等属性,通过使用缓冲区...
而NIO通过一个线程管理多个通道,避免了线程创建和销毁的开销,降低了系统资源的消耗。 在Java NIO库中,FileChannel用于文件操作,SocketChannel和ServerSocketChannel分别对应网络的客户端和服务器端通信。其中,...
缓冲区是Java NIO中非常重要的一个概念,它是特定基本类型元素的线性有限序列。缓冲区有四个基本属性:容量、限制、位置和标记。 * 容量(Capacity):缓冲区中元素的数量,不能为负数,不能更改。 * 限制(Limit)...
而Java NIO引入了Channel(通道)和Buffer(缓冲区)的概念,以及Selector(选择器)机制,使得一个线程可以同时监控多个通道的事件,大大提高了处理效率。以下是NIO的主要组件和特性: 1. **Channel**:类似于流,...