`
buzhucele
  • 浏览: 332417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA NIO 大文件读取

    博客分类:
  • java
阅读更多
import java.io.File;
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 {
		System.err.println("begin");
		long start = System.currentTimeMillis();
		int _5M = 1024*1024*5;
		File fin = new File("D:\\debug.log");  //文件大小200M
		File fout = new File("D:\\debug-bak.log");
		FileChannel fcin = new RandomAccessFile(fin, "r").getChannel();
		ByteBuffer rBuffer = ByteBuffer.allocate(_5M);
		FileChannel fcout = new RandomAccessFile(fout, "rws").getChannel();
		ByteBuffer wBuffer = ByteBuffer.allocateDirect(_5M);
		readFileByLine(_5M, fcin, rBuffer, fcout, wBuffer);
		System.err.print((System.currentTimeMillis() - start) /1000);
	}

	public static void readFileByLine(int bufSize, FileChannel fcin,
			ByteBuffer rBuffer, FileChannel fcout, ByteBuffer wBuffer) {
		String enterStr = "\n";
		try {
			byte[] bs = new byte[bufSize];
			StringBuilder strBuf = new StringBuilder("");
			String tempString = null;
			while (fcin.read(rBuffer) != -1) {
				int rSize = rBuffer.position();
				rBuffer.rewind();
				rBuffer.get(bs);
				rBuffer.clear();
				tempString = new String(bs, 0, rSize);
				int fromIndex = 0;
				int endIndex = 0;
				while ((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1) {
					String line = tempString.substring(fromIndex, endIndex);
					line = strBuf.toString() + line;
					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) {
			e.printStackTrace();
		}
	}

	public static void writeFileByLine(FileChannel fcout, ByteBuffer wBuffer,
			String line) {
		try {
			fcout.write(wBuffer.wrap(line.getBytes()), fcout.size());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

分享到:
评论
1 楼 zskangs1126 2016-09-21  
 

相关推荐

    java nio 包读取超大数据文件

    - **多线程处理**:结合多线程技术,实现文件读取和数据处理的并行执行,提高整体效率。 综上所述,使用Java NIO处理超大数据文件时,关键是利用好内存映射文件技术和合理的数据读取策略,通过适当的分块和数据...

    JAVA NIO 按行读取大文件,支持 GB级别

    本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件...

    JAVA NIO 按行读取大文件支持 GB级别-修正版

    本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 ...

    java nio 读文件

    总的来说,Java NIO提供了一种更高效、灵活的方式来处理文件读取和其他I/O操作,尤其适合需要处理大量并发I/O请求的场合,例如服务器端编程。通过熟练掌握NIO,开发者可以构建出更加高效的Java应用程序。

    Java用NIO读取文件示范

    简单的用Java的NIO读取文件的程序,给大家参考。

    java nio 写文件

    在Java NIO中,数据的读取和写入都是通过通道(Channel)进行的。通道可以理解为连接到I/O设备的桥梁,例如文件、网络套接字等。要使用NIO写文件,首先需要获取FileChannel对象,这可以通过`FileOutputStream`的`...

    java NIO 写文件

    它提供了从文件读取和写入数据的方法。例如,我们可以使用`FileChannel.write()`方法将数据从缓冲区写入文件。下面是一个简单的示例,展示了如何使用NIO写文件: ```java import java.io.RandomAccessFile; import ...

    java NIO实例

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

    JAVA NIO 简单PFT 文件服务

    PFT(可能指的是文件传输或处理服务)在本场景中可能是通过JAVA NIO实现的一个功能模块,用于提供文件的上传、下载和列表展示服务。 文件服务是任何应用程序中不可或缺的部分,尤其是在Web环境中。在JAVA NIO中,...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

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

    java NIO.zip

    Java NIO提供了FileChannel和FileLock,可以进行高效的文件读写和锁定操作。例如,可以使用FileChannel的transferTo()和transferFrom()方法在通道之间高效地传输数据,而无需临时创建缓冲区。 5. **多路复用器...

    Java NIO英文高清原版

    NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据量的系统。Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 ...

    Large-File-Processing-master_javanio_java大文件处理_

    本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件处理,下面我们将详细探讨相关的知识点。 1. **Java NIO基础**:NIO的核心组件包括通道(Channels)、缓冲区...

    java按行读取大文件并解析入库

    在每次读取后,缓冲区会包含从文件读取的数据。为了按行解析,我们需要将缓冲区转换为CharBuffer,并找到换行符来确定行边界。 ```java CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer); ...

    Java读取大文件的处理

    2. 使用nio技术来读取大文件,可以提高读取速度。 3. 使用多线程技术来读取大文件,可以提高响应速度。 4. 使用分布式技术来读取大文件,可以提高读取速度和响应速度。 Java读取大文件的处理需要考虑性能和响应速度...

    Java NIO测试示例

    Java NIO提供了一些类,如Files、Path和Paths,用于处理文件系统操作,如创建、删除、重命名文件,以及读取文件属性等。 6. **异步I/O(Asynchronous File Channel)**: Java NIO还引入了异步文件通道,支持异步...

    java NIO详细教程

    - **缓冲区(Buffer)**:缓冲区是Java NIO中数据读写的基础单元。根据数据类型的不同,Java NIO 提供了多种缓冲区: - **ByteBuffer**:用于基本字节数据的缓冲。 - **CharBuffer**:用于字符数据的缓冲。 - **...

Global site tag (gtag.js) - Google Analytics