1. 程式人生 > >java IO--位元組緩衝流

java IO--位元組緩衝流

/**
 * ClassName: 位元組快取流
 * 為了解決在寫入檔案操作時,頻繁的操作檔案所帶來的效能降低的問題
 * BufferedOutputStream 內部預設的快取大小時8kb,每次寫入時儲存到的快取中的byte陣列中,當陣列存滿 時,會把陣列中的資料寫入檔案,
 * 並且快取下標歸零
 * @Description: TODO
 * @author cai
 * @date 2018年10月17日 
 */
public class BufferStreamDemo {

	/*
	 * 讀入記憶體的位元組快取流寫法
	 */
	private static void byteReader() {
		File file = new File("C:\\Users\\Desktop\\需要被刪的\\新建文字文件 (4).txt");
		InputStream in;
		try {
			in = new FileInputStream(file);
			//構造一個位元組緩衝流
			BufferedInputStream bis = new BufferedInputStream(in);
			byte[] bytes = new byte[2048];
			int len = -1;
			while((len=bis.read(bytes)) != -1) {
				System.out.println(new String(bytes,0,len));
		} 
			bis.close();
		}catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	/*
	 * 讀入記憶體的位元組快取流,程式碼少一些,以及會自動關閉的寫法
	 */
	private static void byteReader2() {
		File file = new File("C:\\Users\\Desktop\\需要被刪的\\新建文字文件 (4).txt");
		try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))){
			byte[] bytes = new byte[2048];
			int len = -1;
			while((len=bis.read(bytes)) != -1) {
				System.out.println(new String(bytes,0,len));
		} 
		}catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	
	/*
	 * 寫出檔案的位元組快取流
	 */
	private static void byteWriter() {
		File file = new File("C:\\Users\\Desktop\\需要被刪的\\新建文字文件 (4).txt");
		try {
			OutputStream out = new FileOutputStream(file);
			//構造一個位元組緩衝流
			BufferedOutputStream bos = new BufferedOutputStream(out);
			
			//
			String info = "牛奶君";
			out.write(info.getBytes());
			
			bos.close();
			//out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		byteWriter();
		byteReader();
	}
}