文档章节

【java】nio读写

_______-
 _______-
发布于 2017/09/06 16:06
字数 312
阅读 4
收藏 0
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

import org.junit.Test;

public class NioMain {
	@Test
	public  void bioread(){
		InputStream in = null;
		try{
			in = new BufferedInputStream(new FileInputStream("src/nomal_io.txt"));
			
			InputStreamReader inputStreamReader = new InputStreamReader(in,"UTF-8"); 
			BufferedReader br = new BufferedReader(inputStreamReader); 
			String data = null;
			while((data = br.readLine())!=null){
				System.out.println(data); 
			}
			
//			byte [] buf = new byte[1024];
//			int bytesRead = in.read(buf);
//			while(bytesRead != -1){
//				for(int i=0;i<bytesRead;i++){
//					System.out.print((char)buf[i]);
//				}
//				bytesRead = in.read(buf);	
//			}
		}catch (IOException e){
			e.printStackTrace();
		}finally{
			try{
				if(in != null){
					in.close();
				}
			}catch (IOException e){
				e.printStackTrace();
			}
		}
	}
	
	

	@Test
	public  void readByte(){
		//数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中

		RandomAccessFile aFile = null;
		try{

			aFile = new RandomAccessFile("src/nio.txt","rw");
			FileChannel fileChannel = aFile.getChannel();

			ByteBuffer buf = ByteBuffer.allocate(1024);
			int bytesRead = fileChannel.read(buf);

			while(bytesRead != -1){
				buf.flip();
				while(buf.hasRemaining()){
					System.out.print((char)buf.get());
				}

				buf.compact();
				bytesRead = fileChannel.read(buf);
			}
			
		}catch (IOException e){
			e.printStackTrace();
		}
		finally{
			try{
				if(aFile != null){
					aFile.close();
				}
			}catch (IOException e){
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 
	 */
	@Test
	public void readStr(){
		RandomAccessFile raf =null;
		try {  
			Charset charset = Charset.forName("UTF-8");
			CharsetDecoder decoder = charset.newDecoder();  

			raf = new RandomAccessFile("src/nio.txt", "rw");  
			FileChannel fc = raf.getChannel();  

			ByteBuffer buffer = ByteBuffer.allocate(512);   
			CharBuffer cb = CharBuffer.allocate(512);  

			int count = fc.read(buffer);  
			while (count != -1) {   
				buffer.flip();  
				decoder.decode(buffer, cb, false);  
				cb.flip();  
				while (cb.hasRemaining()) {  
					System.out.print(cb.get());  
				}   
				buffer.clear();  
				cb.clear();  
				count = fc.read(buffer);  
			}  
		} catch (Exception e) {  
			e.printStackTrace();  
		}
		finally{
			try{
				if(raf != null){
					raf.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		
		
		
	}
	
	/**
	 * nio 拷贝文件
	 */
	@Test
	public  void copyfile(){
		RandomAccessFile fromFile = null;
		RandomAccessFile toFile = null;
		try{
			fromFile = new RandomAccessFile("src/fromFile.txt","rw");
			FileChannel fromChannel = fromFile.getChannel();
			toFile = new RandomAccessFile("src/toFile.txt","rw");
			FileChannel toChannel = toFile.getChannel();

			fromChannel.transferTo(0,fromChannel.size(),toChannel);

		}catch (IOException e){
			e.printStackTrace();
		}
		finally{
			try{
				if(fromFile != null){
					fromFile.close();
				}
				if(toFile != null){
					toFile.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
	
}

© 著作权归作者所有

共有 人打赏支持
_______-
粉丝 3
博文 92
码字总数 36164
作品 0
浦东
程序员
面试小结之IO篇

最近面试一些公司,被问到的关于Java NIO编程的问题,以及自己总结的回答。 谈谈对Java IO的认识。 对于I/O操作来说, 其根本的作用在于传输数据。输入和输出指的仅是数据的流向,实际传输是通...

ginobefun
2017/06/14
0
0
Java BIO、NIO、AIO 比较

理解一下概念,以银行取款为例 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读...

Corlang
2016/02/01
94
0
[高并发Java 八] NIO和AIO

IO感觉上和多线程并没有多大关系,但是NIO改变了线程在应用层面使用的方式,也解决了一些实际的困难。而AIO是异步IO和前面的系列也有点关系。在此,为了学习和记录,也写一篇文章来介绍NIO和...

Hosee
2016/02/15
12.3K
6
Java BIO、NIO、AIO 学习

先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时...

小七_Dream
2015/09/18
160
0
03. Java NIO Channel 通道

Java NIO Channel通道和流非常相似,主要有以下几点区别: 通道可以度也可以写,流一般来说是单向的(只能读或者写)。 通达可以异步读写。 通道总是基于缓冲区Buffer来读写。 正如上面提到的...

逝去的回忆
2016/11/21
11
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
20
5
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部