JAVA NIO之分散和聚合

package NIOTest;

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.util.Map;

import org.junit.Test;

/**
 * 分散与聚集
 * 分散读取(Scattering reads):将通道中数据分散到多个缓冲区
 * 聚集写入(Gathering writer):将多个缓冲区的数据聚集到通道中
 *
 */
public class ScatterTest {

	public static void main(String[] args) {
		test5();
	}
	
	public static void test() {
		try {
			RandomAccessFile raf=new RandomAccessFile("D:\\1.txt","rw");
			//获取通道
			FileChannel channel1=raf.getChannel();
			//分配指定大小的缓冲区
			ByteBuffer buf1=ByteBuffer.allocate(1024);
			ByteBuffer buf2=ByteBuffer.allocate(1024);
			//分散读取
			ByteBuffer[] bufs= {buf1,buf2};
			channel1.read(bufs);
			for(ByteBuffer bytebuffer:bufs) {
				bytebuffer.flip();//切换到读取数据的模式
			}
			System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
			System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
			System.out.println("----------------聚集写入--------------------------");
			RandomAccessFile raf2=new RandomAccessFile("D:\\2.txt","rw");
			FileChannel filechannel2=raf2.getChannel();
			filechannel2.write(bufs);
			channel1.close();
			filechannel2.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 字符集 charset
	 * 编码:字符串--》字符数组
	 * 解码:字符数组--》字符串
	 */
	public static void charTest() {
		Map<String,Charset> map=Charset.availableCharsets();
		for(Map.Entry<String, Charset> entry:map.entrySet()) {
			System.out.println(entry.getKey()+"="+entry.getValue());
		}
	}
	
	public static void test5() {
		Charset cs1=Charset.forName("GBK");
		//获取编码器与解码器
		CharsetEncoder ce=cs1.newEncoder();
		
		//获取解码器
		CharsetDecoder cd=cs1.newDecoder();
		CharBuffer cBuf=CharBuffer.allocate(1024);
		cBuf.put("钢铁侠");
		cBuf.flip();
		//编码
		ByteBuffer bBuf;
		try {
			bBuf = ce.encode(cBuf);
			for(int i=0;i<bBuf.limit();i++) {
				System.out.println(bBuf.get());
			}
			//解码:
			bBuf.flip();
			CharBuffer cBuf2=cd.decode(bBuf);
			System.out.println(cBuf2.toString());
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值