java基于NIO的分散读取文件,然后统一聚合后写入文件

分散读取:对于一个文件,可以分散的读取数据,可以快速的读取,好比多个线程在分段同时读取;

聚合写入:为了提高效率,一般读取到的数据都是分散的,要快速写入,就需要把分散的数据聚集在一起,然后一块写入到文件;

具体代码如下:

               //首先创建一个随机访问文件
		RandomAccessFile raf= new RandomAccessFile("test.txt", "rw");
		//根据随机获取通道
		FileChannel channel = raf.getChannel();
		//分配指定大小指定缓冲区
		ByteBuffer buf1=ByteBuffer.allocateDirect(200);
		ByteBuffer buf2=ByteBuffer.allocateDirect(1024);
		// 分散读取
		ByteBuffer[] bufs={buf1,buf2};
		channel.read(bufs);//采用通道分散读取数据
		for (ByteBuffer byteBuffer : bufs) {
			// 切换成读模式
			byteBuffer.flip();
		}
		System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
		System.out.println("-------------------------------------------------");
		System.out.println(new String(bufs[1].array(),1,bufs[1].limit()));
		System.out.println("------聚集写入---------");
                //创建一个随机写入文件
		RandomAccessFile raf2= new RandomAccessFile("test2.txt", "rw");
		//获取写入通道
		FileChannel channel2 = raf2.getChannel();
		channel2.write(bufs);//采用通道写入数据
		raf2.close();//关闭
		raf.close();//关闭

  

  

原文地址:https://www.cnblogs.com/hglSV/p/11203883.html

时间: 2024-10-10 12:29:31

java基于NIO的分散读取文件,然后统一聚合后写入文件的相关文章

java使用I/O流实现9*9乘法口诀的写入文件和从文件打印到屏幕

1.9*9乘法口诀打印到test2.txt中,代码如下 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class week { publicstatic void main(String[] args) throws Exception { File t

JAVA之NIO按行读取大文件

做项目过程中遇到要解析100多M的TXT文件,并入库.用之前的FileInputStream.BufferedReader显然不行了,虽然readLine这方法可以直接按行读取,但是去读一个140M左右,68W条数据的文件时,不但耗时长而且会内存溢出,即你等不到读完68W条数据时就内存溢出了.所以得用NIO下面的相关对象及方法. 用到 字节缓冲区(Java.nio.ByteBuffer);用于读取.写入.映射和操作文件的通道( java.nio.channels.FileChannel);设置文

PHP关于文件与文件夹(1) 写入文件 文件权限 三、锁定文件

一.文件权限 总之中的一个切都是为了保证文件夹的安全,保证文件夹的安全比保证文件的安全更重要. 二.写入文件 file_put_contents($file,$data);  //假设没有的话会创建.有的话覆盖原文件: file_put_contents($file,$data,FILE_APPEND); //没的话会创建,有的话追加在后面: file_put_contents($file,$data.PHP_EOL,FILE_APPEND);//有换行 [样例]: <!DOCTYPE html

170407、java基于nio工作方式的socket通信

客户端代码: /** * */ package com.bobohe.nio; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio

Python pickle序列化后写入文件,并实现曾加内容

pickle序列化 # _*_coding:utf-8_*_ import pickle import os list_ec = [] while True: if os.path.isfile("course_list"): # 判断文件夹是否存在 with open("course_list", "rb") as f: list_aa = pickle.load(f) f.close() # print(list_aa) # 可以打开,每次读

shell脚本中怎样同时执行多个.sql文件,并把结束写入文件中(转)

第一版: #!/bin/bash USER="root" DATABASE="test" TABLE="user" mysql -u $USER $DATABASE --html --default-character-set=utf8 < one.sql > /tmp/check.html mysql -u $USER $DATABASE --html --default-character-set=utf8 < two.sq

排序好后写入文件

1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 struct person{ 6 char *number; 7 char *name; 8 int score; 9 }; 10 11 int main() 12 { 13 struct person arr[5]; 14 FILE *fp = fopen("src", "r"); 15 FI

Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作

Windows phone7中文件的存储模式是独立的,即独立存储空间(IsolatedStorage).对文件夹与文件操作,需要借助IsolatedStorageFile类. IsolatedStorageFile提供了对独立存储的空间获取,文件夹的删除.移动,文件的创建.删除等IO操作. 在Windows phone7中对文件的操作,都需要引入命名空间System.IO.IsolatedStorage和System.IO. 在System.IO.IsolatedStorage 命名空间下有以下

小白学开发(iOS)OC_ 字符串写入文件(2015-08-13)

// //  main.m //  字符串写入文件 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 将字符串写入到一个文件,并保存 > 需要写入文件的字符串内容