package alex;
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简介 Java NIO(New IO)是Java平台上的新输入/输出流API,它提供了与传统IO(即Java IO)不同的数据处理方式。NIO在Java 1.4版本引入,并在后续版本...
在本篇文章中,我们将深入探讨Java NIO如何读取文件。 一、NIO的基本概念 1. 缓冲区(Buffer):NIO的核心组件,用于存储数据。Java提供了多种Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据...
Java NIO提供了一种高效、灵活的文件操作方式,通过Buffer、Channel、Paths和Files等核心组件,可以实现复杂的文件读写操作。NIO的异步操作特性也使得它在处理大量并发文件操作时具有显著的性能优势。在实际开发中,...
`NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...
Java NIO提供了FileChannel和FileLock,可以进行高效的文件读写和锁定操作。例如,可以使用FileChannel的transferTo()和transferFrom()方法在通道之间高效地传输数据,而无需临时创建缓冲区。 5. **多路复用器...
PFT(可能指的是文件传输或处理服务)在本场景中可能是通过JAVA NIO实现的一个功能模块,用于提供文件的上传、下载和列表展示服务。 文件服务是任何应用程序中不可或缺的部分,尤其是在Web环境中。在JAVA NIO中,...
本篇将详细探讨Java NIO在写文件方面的应用。 1. **通道(Channels)** 在Java NIO中,数据的读取和写入都是通过通道(Channel)进行的。通道可以理解为连接到I/O设备的桥梁,例如文件、网络套接字等。要使用NIO写...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种新的方式来处理I/O操作,相比传统...通过理解其核心组件和操作机制,开发者可以充分利用NIO来优化文件读写性能,尤其是在高并发和大文件处理的场景下。
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
在给定的压缩包文件中,我们关注的是"FastCopyFile.java"、"UseFloatBuffer.java"以及NIO中的文件锁功能。 首先,让我们详细了解一下`FastCopyFile.java`。这个文件很可能是一个示例程序,演示了如何使用Java NIO...
Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel和ServerSocketChannel用于网络通信,DatagramChannel用于UDP通信。通道可以进行读写操作,并且是非阻塞的,这意味着如果数据未准备好,...
Java NIO还引入了异步文件通道,支持异步读写文件。通过Future和CompletableFuture,可以方便地进行异步操作,并获取结果。 7. **字符集转换**: NIO提供了Charset类来处理字符编码和解码,支持多种字符集,如UTF...
- Java NIO提供了一组文件系统操作API,例如FileChannel用于读写文件,MappedByteBuffer实现了内存映射文件,可以直接通过内存访问文件内容,提高了读写速度。 4. **缓冲区的分类** - **ByteBuffer**:用于处理...
本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件处理,下面我们将详细探讨相关的知识点。 1. **Java NIO基础**:NIO的核心组件包括通道(Channels)、缓冲区...
在Java传统IO中,数据的读写都是通过流来完成,而NIO则引入了通道(Channel)和缓冲区(Buffer)的概念,提供了一种非阻塞的I/O操作方式,极大地提高了Java进行并发I/O处理的能力。 首先,我们来看下NIO的核心组件...
2. **文件操作**:NIO提供了高效、灵活的文件读写能力,特别是对于大数据处理,如日志分析、文件复制等。 3. **网络编程**:在网络通信中,NIO可以实现高效的客户端与服务器之间的数据传输,如HTTP、FTP服务器。 4...