java中io以及nio的基本案例

1、java中io和nio的區別個人理解,主要在於io是面向流,而nio是面向緩衝區的,io(bio)同步阻塞式的輸入輸出,而nio是同步非阻塞式的輸出輸出。


2、io複製文件代碼

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class IoTest {

	public static void main(String[] args) {
		//創建一個輸入流和輸出流的引用
		InputStream inputStream = null;
		OutputStream outputStream = null;
		try {
			//初始化輸入流和輸出流
			inputStream = new FileInputStream("D:\\text.txt");
			outputStream = new FileOutputStream("D:\\text3.txt");
			//每次讀取的字節流數組大小設置爲1024
			byte bytes[] = new byte[1024];
			//讀取到的長度
			int len = -1;
			//長度爲-1則表示讀到了文件的末尾
			while((len = inputStream.read(bytes))!=-1){
				//輸出到指定文件中
				outputStream.write(bytes,0,len);
				//刷新緩存區
				outputStream.flush();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			//關閉流
			try {
				if(outputStream!=null){
					outputStream.close();
				}
				if(inputStream!=null){
					inputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}


3、nio複製文件的代碼

public class NioTest {

	public static void main(String[] args) throws Exception{
		//得到文件輸入流
		FileInputStream fileInputStream = new FileInputStream(new File("D:\\text.txt"));
		//得到輸入Channel通道
		FileChannel inChannel = fileInputStream.getChannel();
		//得到bytebuffer緩衝區
		ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
		//得到輸出流
		FileOutputStream fileOutputStream = new FileOutputStream("D:\\text3.txt");
		//得到輸出通道
		FileChannel outChanner = fileOutputStream.getChannel();
		int eof = -1;
		//如果讀取到的長度不爲-1則緩衝區有數據
		while((eof=inChannel.read(byteBuffer))!=-1){
			//從讀模式切換到寫模式
			byteBuffer.flip();
			//寫入到指定文件
			outChanner.write(byteBuffer);
			//清空緩衝區
			byteBuffer.clear();
		}
		//關閉通道和輸入輸出流
		outChanner.close();
		fileOutputStream.close();
		inChannel.close();
		fileInputStream.close();
	}
}


4、nio的好處在於nio是同步非阻塞式的,具體實現在於一個線程可以管理一個selector,然後可以有多個channel通道註冊到該selector上,相當於一個線程控制一個selector選擇器可以同時監聽多個channel通道,一旦該通道的緩衝區有新的io請求,可以對該請求進行處理,而io流是同步阻塞式的,一個請求必須處理完成才能處理下一個請求,傳統的tomcat就是使用的bio同步阻塞流方式處理客戶端的請求,效率相對nio要低一些。 下面是nio的請求模型:


發佈了48 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章