java IO學習筆記------(3)字節緩衝流&字符緩衝流&轉換流&數據流

java IO流學習筆記------(3)字節緩衝流&字符緩衝流&轉換流&數據流

字節緩衝流 —BufferedInputStream&BufferedOutputStream

方法無新增可見:文件字節流中的read(),write()方法

緩衝流能夠極大提升性能
緩衝流最底層一定要有節點流
釋放時只需釋放最外層(全釋放也可,規則:從裏到外釋放)

文件字節流綜合練習(字節緩衝流)

package Io; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

/** 
* @賭徒 
*/ 
public class copyT4 { 
public static void main(String[] args) throws IOException { 
     copy("data.txt", "copy1.txt"); 

} 

public static void copy(String srcFile,String srcFile1 ) throws IOException { 
     InputStream bis=new BufferedInputStream( new FileInputStream(srcFile)); 
     OutputStream bos=new BufferedOutputStream(new FileOutputStream(srcFile1)); 

     byte b[]=new byte[1024]; 
     int len=-1; 
     while((len=bis.read(b))!=-1) { 
     bos.write(b,0,len); 
} 
     bos.flush(); 
     bos.close(); 
     bis.close(); 
} 
} 

字符緩衝流—BufferedReader&BufferedWriter

部分方法可見:文件字節流中的read(),write()方法
新增方法:
readline() 讀取一行字符
newline() 寫一行分隔符

文件字符流綜合練習(字符緩衝流)

package Io; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File;  
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

/** 
* @author 賭徒
*/ 
public class copyT5 { 
public static void main(String[] args) throws IOException { 
     //源頭
     File srcFile=new File("data.txt"); 
     File srcFile1=new File("copy2.txt"); 
     //選擇流
     BufferedReader br= new BufferedReader(new FileReader(srcFile)); 
     BufferedWriter bw=new BufferedWriter(new FileWriter(srcFile1));
     String lineString=null; 
     //操作
     while((lineString=br.readLine())!=null) { 
         bw.write(lineString); 
         bw.newLine(); 
} 
     bw.flush(); 
     //釋放
     bw.close(); 
     br.close(); 
} 

} 

轉換流—InputStreamReader&OutputStreamWriter

 InputStreamReader(解碼)/OutputStreamWriter(編碼): 是字節流與字符流
之間的橋樑,能將字節流轉換爲字符流,並且能爲字節流指定字符集,可處理一個個的字符

以字符流的形式操作字節流(純文本)

package Io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 *
 * 1.以字符流的形式操作字節流(純文本)
 * 2.指定字符集
 * @author 賭徒
 *
 */
public class ConvertT6 {

	public static void main(String[] args) {
		try(BufferedReader isr=new BufferedReader( new InputStreamReader(System.in));
		BufferedWriter osw=new BufferedWriter(new OutputStreamWriter(System.out));) {
			//循環獲取鍵盤的輸入(exit退出),輸出此內容
			String string="";
			while(!string.equals("exit")) {
				string=isr.readLine();//循環逐行讀取
				osw.write(string);//循環寫出
				osw.newLine();
				osw.flush();//強制刷新,否則內容會駐留在管道中
			}
			
		} catch (IOException e) {
			System.out.println("操作異常");
		}
	}

}
package Io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

/**
 * 
 * 1.以字符流的形式操作字節流(純文本)
 * 2.指定字符集
 * @author 賭徒
 *
 */
public class ConvertText2 {

	public static void main(String[] args) {
		try(BufferedReader isr=
				new BufferedReader(
						new InputStreamReader(
								new URL("http://www.baidu.com").openStream(),"UTF-8"));) {
			       String msg;
			                    
				while ((msg=isr.readLine())!=null) {
					System.out.println(msg);
		}
	}
		catch (IOException e) {
			System.out.println("操作異常");
		}

	}
}

數據流—DataInputStream&DataOutputStream

 數據輸入流允許應用程序以獨立於機器的方式從基礎輸入流讀取原始Java數據類型(方便處理基本八大數據類型和字符串,不僅保留了數據還保留了數據類型)。 應用程序使用數據輸出流來寫入稍後可以被數據輸入流讀取的數據。

構造:內部要有基礎流
注意:讀寫的順序要一致

數據流練習

package reIo;

import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * 
 * 1.寫出後讀取
 * 2.讀取順序與寫出保持一致
 * @author 賭徒
 *
 */
public class DataT7 {

	public static void main(String[] args) throws IOException {
 
		//寫出
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		DataOutputStream dos=new  DataOutputStream(new BufferedOutputStream(baos));
		//操作數據類型+數據
		dos.writeUTF("你好");
		dos.writeInt(777);
		dos.writeBoolean(true);
		dos.writeChar('a');
		dos.flush();
		byte []bytes=baos.toByteArray();
		System.out.println(bytes.length);
		//讀取
		DataInputStream dis=new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(bytes)));
		//順序與寫出順序一致
		String string=dis.readUTF();
		int num=dis.read();
		boolean b=dis.readBoolean();
		char c=dis.readChar();
		System.out.println(string);
	}

}

其他章節:

java IO流學習筆記------(1)文件字節流
java IO流學習筆記------(2)文件字符流&字節數組流
java IO學習筆記------(4)對象流&打印流&文件分割(隨機流)&文件的合併(序列流)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章