字節和字符流複製

  1.  所有文件的儲存是都是字節(byte)的儲存
  2. 字節流可用於任何類型的對象,包括二進制對象
  3.  字節流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符
  4. 程序中的輸入輸出都是以流的形式保存的,流中保存的實際上全都是字節文件
  5. 字節流和字符流使用是非常相似的,那麼除了操作代碼的不同之外,還有哪些不同呢?

    字節流在操作的時候本身是不會用到緩衝區(內存)的,是與文件本身直接操作的,而字符流在操作的時候是使用到緩衝區的

    字節流在操作文件時,即使不關閉資源(close方法),文件也能輸出,但是如果字符流不使用close方法的話,則不會輸出任何內容,說明字符流用的是緩衝區,並且可以使用flush方法強制進行刷新緩衝區,這時才能在不close的情況下輸出內容


    那開發中究竟用字節流好還是用字符流好呢?

    在所有的硬盤上保存文件或進行傳輸的時候都是以字節的方法進行的,包括圖片也是按字節完成,而字符是只有在內存中才會形成的,所以使用字節的操作是最多的。


    如果要java程序實現一個拷貝功能,應該選用字節流進行操作(可能拷貝的是圖片),並且採用邊讀邊寫的方式(節省內存)

   以上是字節流和字符流的一點區別,以上內容借鑑了點擊打開鏈接
  
    下面是字節和字符的代碼片段
   
    
package webservices;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Copy {
	
	/*
	 * 用字符流緩衝寫文本文件
	 */
	public static void buferCopyTxt(String form,String to) throws IOException{
		
		//字符流
		BufferedReader bReader=null;
		BufferedWriter writer=null;
		
		bReader=new BufferedReader(new FileReader(form));
		writer=new BufferedWriter(new FileWriter(to));
		
		String line;
		
		while((line=bReader.readLine())!=null){
			writer.write(line);
			writer.flush();
		}
		
		System.out.println("從form中拷貝文件到to");
		
		if(bReader!=null){
			bReader.close();
		}if(writer!=null){
			writer.close();
		}
		
	}
	
	/**
	 * 字節流緩衝複製文件
	 * 支持照片
	 * @throws IOException 
	 *
	 */
	
	public static void bufferCopyImage(String from,String to) throws IOException{
		
		BufferedInputStream iStream=null;
		BufferedOutputStream bStream=null;
		
		iStream = new BufferedInputStream(new FileInputStream(from));
		bStream = new BufferedOutputStream(new FileOutputStream(to));
		
		byte [] bytes =new byte [1024];
		
		int num = 0;
		
		while((num=iStream.read(bytes)) != -1){
			bStream.write(bytes,0,num);
			bStream.flush();
		}
		System.out.println("從form中拷貝圖片到to");
		if(iStream!=null){
			iStream.close();
		}if(bStream!=null){
			bStream.close();
		}
	}
	
	public static void main(String[] args) throws IOException {
//
//		File fileForm =new File(dirForm,fileName);
//		if(!fileForm.getParentFile().exists()){
//			fileForm.getParentFile().mkdirs();
//		}
//		fileForm.createNewFile();
//		
//		File fileTo =new File(dirTo);
//		if(!fileTo.isDirectory()){
//			fileTo.mkdirs();
//		}
		
		Copy.buferCopyTxt("D:\\form\\test.txt", "D:\\to\\a.txt");
		bufferCopyImage("D:\\form\\11.png", "D:\\to\\22.png");
		
	}
}

         
    


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