import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class TestNio {
public static void main(String args[]) throws Exception{
//String infile = "D:\\workspace\\test\\usagetracking.log";
//FileInputStream fin= new FileInputStream(infile);
//FileChannel fcin = fin.getChannel();
int bufSize = 100;
File fin = new File("D:\\workspace\\test\\usagetracking.log");
File fout = new File("D:\\workspace\\test\\usagetracking2.log");
FileChannel fcin = new RandomAccessFile(fin, "r").getChannel();
ByteBuffer rBuffer = ByteBuffer.allocate(bufSize);
FileChannel fcout = new RandomAccessFile(fout, "rws").getChannel();
ByteBuffer wBuffer = ByteBuffer.allocateDirect(bufSize);
readFileByLine(bufSize, fcin, rBuffer, fcout, wBuffer);
System.out.print("OK!!!");
}
public static void readFileByLine(int bufSize, FileChannel fcin, ByteBuffer rBuffer, FileChannel fcout, ByteBuffer wBuffer){
String enterStr = "\n";
try{
byte[] bs = new byte[bufSize];
int size = 0;
StringBuffer strBuf = new StringBuffer("");
//while((size = fcin.read(buffer)) != -1){
while(fcin.read(rBuffer) != -1){
int rSize = rBuffer.position();
rBuffer.rewind();
rBuffer.get(bs);
rBuffer.clear();
String tempString = new String(bs, 0, rSize);
//System.out.print(tempString);
//System.out.print("<200>");
int fromIndex = 0;
int endIndex = 0;
while((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1){
String line = tempString.substring(fromIndex, endIndex);
line = new String(strBuf.toString() + line);
//System.out.print(line);
//System.out.print("</over/>");
//write to anthone file
writeFileByLine(fcout, wBuffer, line);
strBuf.delete(0, strBuf.length());
fromIndex = endIndex + 1;
}
if(rSize > tempString.length()){
strBuf.append(tempString.substring(fromIndex, tempString.length()));
}else{
strBuf.append(tempString.substring(fromIndex, rSize));
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void writeFileByLine(FileChannel fcout, ByteBuffer wBuffer, String line){
try {
//write on file head
//fcout.write(wBuffer.wrap(line.getBytes()));
//wirte append file on foot
fcout.write(wBuffer.wrap(line.getBytes()), fcout.size());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
二、使用Java NIO读取文件 在Java NIO中,读取文件主要涉及FileChannel和ByteBuffer。以下是一个简单的示例: ```java import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels....
1. **FileChannel**:`java.nio.channels.FileChannel`是用于读写文件的通道,可以从一个文件通道向另一个文件通道直接传输数据,避免了中间缓冲区的开销。在文件复制中,我们通常使用`transferTo()`和`transferFrom...
4. **FileChannel**:用于文件的读写,可以实现大文件的高效传输,支持内存映射(Mmap)技术,能直接将文件映射到内存中。 5. **SocketChannel**:用于网络通信,可以建立TCP连接,进行非阻塞的读写。在`NIOServer....
Java IO API是Java早期就引入的I/O处理机制,主要用于读写文件、处理流等操作。在这个版本中,文件分割器可能使用了`BufferedReader`或`DataInputStream`来读取源文件,然后使用`FileOutputStream`或`...
这个文件很可能是一个示例程序,演示了如何使用Java NIO进行高效的大文件复制。在传统的Java I/O中,我们通常使用InputStream和OutputStream进行文件复制,而这种方式需要不断读写,造成大量的上下文切换,效率较低...
- 文件操作:FileChannel提供了一种高效的方式处理大文件或进行文件映射。 - 数据管道:通道间的直接数据传输可以避免额外的内存拷贝,提高性能。 6. **NIO的挑战**: - 编程复杂性:相比BIO,NIO的编程模型更...
在这个javaNIO实例中,我们可以学习到如何利用Java NIO进行文件的读取、写入以及复制操作。 首先,NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的路径,如文件通道...
**JAVA-NIO程序设计完整实例** Java NIO(New IO)是Java 1.4引入的一个新特性,它为Java提供了非阻塞I/O操作的能力,使得Java在处理I/O时更加高效。NIO与传统的BIO(Blocking I/O)模型相比,其核心在于它允许程序...
在Java NIO中,服务器线程会使用选择器进行轮询,调用`selector.select()`来检测哪些通道已经准备好了进行读写操作。然后,根据返回的选择键(SelectionKey)集合,可以获取就绪的通道并进行相应的处理,如读取...
标题“nio.rar_NIO_NIO-socket_java nio_java 实例_java.nio”表明这个压缩包包含了一个关于Java NIO的实例,特别是关于NIO套接字(Socket)的编程示例。NIO套接字是Java NIO库中用于网络通信的关键组件,它们允许...
Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel和ServerSocketChannel用于网络通信,DatagramChannel用于UDP通信。通道可以进行读写操作,并且是非阻塞的,这意味着如果数据未准备好,...
Java NIO(New IO)是Java 1.4引入的一个新特性,它是对传统IO模型的重大改进,提供了更高效的数据处理方式。NIO的核心概念包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。它允许多个输入/输出操作...
标题中的"NIO实例"指的是Java中的非阻塞I/O(Non-blocking Input/Output)技术,它是Java从1.4版本开始引入的一种I/O模型,旨在提高网络编程的效率和性能。与传统的IO(BIO)相比,NIO具有异步、非阻塞的特点,能够...
例如,`FileChannel`可以用于高效地读写文件,而`Selector`则能监控多个通道的事件,实现多路复用。 **文件压缩成jar包** 在Java中,`java.util.jar`包提供了创建、修改和提取jar文件的工具。`JarOutputStream`用于...
- **通道(Channels)**:Java NIO 提供了多种通道,如文件通道、套接字通道等,它们代表不同类型的I/O操作。 - **缓冲区(Buffers)**:数据在通道和应用程序之间传输时会存储在缓冲区中,缓冲区提供了更有效率的...
1. **通道(Channel)**:通道是数据传输的路径,它可以从一个数据源(如文件、网络连接)读取数据,也可以向目标(如内存、网络连接)写入数据。常见的通道类有FileChannel、SocketChannel、ServerSocketChannel等...
在实际应用中,Java NIO常用于网络服务器、大文件处理、多线程间的通信等场景。理解并掌握NIO的原理和使用,对于提升Java应用的性能和可扩展性至关重要。通过以上介绍的知识点,你可以开始编写基于NIO的应用,例如...
这个例子包含了NIO在网络通信中的应用,包括服务器端(Server)和客户端(Client)的实现。 在Java NIO中,核心组件有通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的途径,如套接字...
例如,`FileInputStream`和`FileOutputStream`用于读写文件,它们都是一次性处理一个字节或多个字节。IO模型是阻塞式的,意味着在一个线程中,当调用read或write方法时,程序会等待数据准备好或完全写入,这可能导致...
在NIO中,文件句柄可以进行非阻塞读写,即调用读写方法不会导致当前线程被挂起,而是立即返回。这使得一个线程可以管理多个I/O通道,从而极大地提高了I/O操作的效率和并发能力。 #### 代码详解 1. **初始化和配置*...