`
kavy
  • 浏览: 891147 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

nio读取大文件例子

 
阅读更多
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中,读取文件主要涉及FileChannel和ByteBuffer。以下是一个简单的示例: ```java import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels....

    NIO复制文件

    1. **FileChannel**:`java.nio.channels.FileChannel`是用于读写文件的通道,可以从一个文件通道向另一个文件通道直接传输数据,避免了中间缓冲区的开销。在文件复制中,我们通常使用`transferTo()`和`transferFrom...

    java NIO实例

    4. **FileChannel**:用于文件的读写,可以实现大文件的高效传输,支持内存映射(Mmap)技术,能直接将文件映射到内存中。 5. **SocketChannel**:用于网络通信,可以建立TCP连接,进行非阻塞的读写。在`NIOServer....

    文件分割器(IO and NIO 两个版本)

    Java IO API是Java早期就引入的I/O处理机制,主要用于读写文件、处理流等操作。在这个版本中,文件分割器可能使用了`BufferedReader`或`DataInputStream`来读取源文件,然后使用`FileOutputStream`或`...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    这个文件很可能是一个示例程序,演示了如何使用Java NIO进行高效的大文件复制。在传统的Java I/O中,我们通常使用InputStream和OutputStream进行文件复制,而这种方式需要不断读写,造成大量的上下文切换,效率较低...

    NIO编程实现实例

    - 文件操作:FileChannel提供了一种高效的方式处理大文件或进行文件映射。 - 数据管道:通道间的直接数据传输可以避免额外的内存拷贝,提高性能。 6. **NIO的挑战**: - 编程复杂性:相比BIO,NIO的编程模型更...

    javaNIO实例

    在这个javaNIO实例中,我们可以学习到如何利用Java NIO进行文件的读取、写入以及复制操作。 首先,NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的路径,如文件通道...

    JAVA-NIO程序设计完整实例

    **JAVA-NIO程序设计完整实例** Java NIO(New IO)是Java 1.4引入的一个新特性,它为Java提供了非阻塞I/O操作的能力,使得Java在处理I/O时更加高效。NIO与传统的BIO(Blocking I/O)模型相比,其核心在于它允许程序...

    java-nio.rar_java nio_nio 对象实例化

    在Java NIO中,服务器线程会使用选择器进行轮询,调用`selector.select()`来检测哪些通道已经准备好了进行读写操作。然后,根据返回的选择键(SelectionKey)集合,可以获取就绪的通道并进行相应的处理,如读取...

    nio.rar_NIO_NIO-socket_java nio_java 实例_java.nio

    标题“nio.rar_NIO_NIO-socket_java nio_java 实例_java.nio”表明这个压缩包包含了一个关于Java NIO的实例,特别是关于NIO套接字(Socket)的编程示例。NIO套接字是Java NIO库中用于网络通信的关键组件,它们允许...

    一个java NIO的例子

    Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel和ServerSocketChannel用于网络通信,DatagramChannel用于UDP通信。通道可以进行读写操作,并且是非阻塞的,这意味着如果数据未准备好,...

    NIO与零拷贝_javanio_nio和零拷贝_

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

    NIO实例

    标题中的"NIO实例"指的是Java中的非阻塞I/O(Non-blocking Input/Output)技术,它是Java从1.4版本开始引入的一种I/O模型,旨在提高网络编程的效率和性能。与传统的IO(BIO)相比,NIO具有异步、非阻塞的特点,能够...

    JAVA_IO/NIO(demo,压缩jar文件)

    例如,`FileChannel`可以用于高效地读写文件,而`Selector`则能监控多个通道的事件,实现多路复用。 **文件压缩成jar包** 在Java中,`java.util.jar`包提供了创建、修改和提取jar文件的工具。`JarOutputStream`用于...

    java NIO推送实例

    - **通道(Channels)**:Java NIO 提供了多种通道,如文件通道、套接字通道等,它们代表不同类型的I/O操作。 - **缓冲区(Buffers)**:数据在通道和应用程序之间传输时会存储在缓冲区中,缓冲区提供了更有效率的...

    Java NIO实例

    1. **通道(Channel)**:通道是数据传输的路径,它可以从一个数据源(如文件、网络连接)读取数据,也可以向目标(如内存、网络连接)写入数据。常见的通道类有FileChannel、SocketChannel、ServerSocketChannel等...

    Java NIO原理分析及代码实例

    在实际应用中,Java NIO常用于网络服务器、大文件处理、多线程间的通信等场景。理解并掌握NIO的原理和使用,对于提升Java应用的性能和可扩展性至关重要。通过以上介绍的知识点,你可以开始编写基于NIO的应用,例如...

    实现java网络与nio例子

    这个例子包含了NIO在网络通信中的应用,包括服务器端(Server)和客户端(Client)的实现。 在Java NIO中,核心组件有通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的途径,如套接字...

    java nio与io性能测试

    例如,`FileInputStream`和`FileOutputStream`用于读写文件,它们都是一次性处理一个字节或多个字节。IO模型是阻塞式的,意味着在一个线程中,当调用read或write方法时,程序会等待数据准备好或完全写入,这可能导致...

    多线程NIO客户端实例

    在NIO中,文件句柄可以进行非阻塞读写,即调用读写方法不会导致当前线程被挂起,而是立即返回。这使得一个线程可以管理多个I/O通道,从而极大地提高了I/O操作的效率和并发能力。 #### 代码详解 1. **初始化和配置*...

Global site tag (gtag.js) - Google Analytics