Java IO學習筆記(三)轉換流、數據流、字節數組流。本站提示廣大學習愛好者:(Java IO學習筆記(三)轉換流、數據流、字節數組流)文章只能為提供參考,不一定能成為您想要的結果。以下是Java IO學習筆記(三)轉換流、數據流、字節數組流正文
轉換流
1、轉換流:將字節流轉換成字符流,轉換之後就可以一個字符一個字符的往順序寫內容了,並且可以調用字符節點流的write(String s)辦法,還可以在裡面套用BufferedReader()和BufferedWriter,並運用它們的readLine 和 newLine辦法。 2、有兩種轉換流:InputStreamReader、OutputStreamWriter 練習小順序1: package test.io.transfer; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; public class OutputStreamWriterTest { public static void main(String args[]){ FileOutputStream fos = null; FileOutputStream fos1 = null; OutputStreamWriter opsw = null; try { fos = new FileOutputStream("E:/技術學習/java/test/Socket/test4.txt"); fos1 = new FileOutputStream("E:/技術學習/java/test/Socket/test5.txt"); opsw = new OutputStreamWriter(fos); opsw.write("轉換流練習"); System.out.println(opsw.getEncoding());//獲取編碼格式 opsw.flush(); opsw.close(); opsw = new OutputStreamWriter(fos1,"GBK"); opsw.write("轉換流練習轉換流練習"); System.out.println(opsw.getEncoding());//獲取編碼格式 opsw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); opsw.close(); } catch (IOException e) { e.printStackTrace(); } } } } 練習小順序2: package test.io.transfer; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class InputStreamReaderTest { public static void main(String args[]){ InputStreamReader isr = new InputStreamReader(System.in);//System.in是inputstream的子類 BufferedReader bf = new BufferedReader(isr); String ss = null; try { while((ss=bf.readLine()) != null){ if(ss.equals("exit")){ break; } System.out.println(ss); } } catch (IOException e) { e.printStackTrace(); }finally{ try { isr.close(); bf.close(); } catch (IOException e) { e.printStackTrace(); } } } } 數據流、字節數組流 1、數據流:普通的字節流只能讀寫byte[]類型的數據,只能寫int、byte、byte[]類型的數據 ;字符輸出流只能讀char[]類型的數據,字符輸入流只能寫char、char[]、int、String類型的數據。假如想要讀寫long、double、boolean等其他類型的數據,就需求用到數據流。 2、數據流是一種處置流,有兩種數據流:DataInputStream、DataOutputStream,辨別承繼於InputStream和OutputStream。他們需求套在InputStream和OutputStream類型的字節流上操作,下圖中截取一些,詳細辦法見協助文檔。 DataInputStream:
DataOutputStream:
DataInputStream的結構辦法:DataInputStream(InputStream in) DataOutputStream 的結構辦法:DataOutputStream(OutputStream out) 3、字節數組流(字節流): ByteArrayInputStream: 字節數組輸出流在內存中創立一個字節數組緩沖區,從輸出流讀取的數據保管在該字節數組緩沖區中,從字節數組中讀數據。 ByteArrayOutputStream:創立字節數組輸入流的同時,內存會為該輸入流創立一個默許大小的字節數組,用於存儲寫入的字節內容。 4、字節數組流的結構辦法: ByteArrayInputStream(byte[] buf); ByteArrayInputStream(byte[] buf, int offset, int length); ByteArrayOutputStream(); 創立字節輸入流的同時內存中會創立一個byte[]字節數組,默許大小。 ByteArrayOutputStream(int size); 創立字節輸入流的同時內存中會創立一個大小為size的byte[]字節數組。 在運用的時分,可以用byte[] b = byteArrayOutputStream.toByteArray()前往流中的字節數組,然後創立ByteArrayInputStream bai = new ByteArrayInputStream(byte[] b)來將輸出流接入到字節數組上。 練習小例子: package test.io.data; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class DataByteArrayStreamTest { public static void main(String args[]){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); ByteArrayInputStream bais = null; DataInputStream dis = null; try { dos.writeDouble(Math.random()); dos.writeBoolean(true); dos.flush(); bais = new ByteArrayInputStream(baos.toByteArray()); dis = new DataInputStream(bais); System.out.println(dis.available()); //先進先出,先寫先讀,假如這裡是先讀的Boolean,則會自動找到存入的double數據的第一個字節,當做boolean類型讀出來 System.out.println(dis.readDouble()); System.out.println(dis.readBoolean()); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(baos != null){ baos.close(); } if(dos != null){ dos.close(); } if(bais != null){ bais.close(); } if(dis != null){ dis.close(); } } catch (IOException e) { e.printStackTrace(); } } } } 控制台輸入後果: 9 0.02241410199042526 true