JAVA基礎21-IO流
阿新 • • 發佈:2018-12-22
1.流分類
不同角度對流進行分類:
1.根據資料單位不同,字元流,位元組流
2.資料流方向可分為,輸入流,輸出流
3.功能不同,可分為:節點流,處理流。
2.流的體系
Java中所有的流類位於java.io包,分別繼承以下四種抽象流型別
型別 | 位元組流 | 字元流 |
---|---|---|
輸入流 | InputStream | Reader |
輸出流 | OutputStream | Writer |
3.常見的流介紹
3-1 常見節點流
1.對檔案操作的字元流有FileReader/FileWriter
2.對檔案操作的位元組流有 FileInputStream/FileOutputStram
3-2.常見處理流
3-2-1.緩衝流
概念:緩衝流要套接在相應的節點流上,為讀寫提供了緩衝功能 分類: A:位元組緩衝流 BufferedInputStream/BufferedOutputStream B:字元緩衝流 BufferReader/BufferWriter 注意: A:字元緩衝流分別提供了讀取和寫入一行的方法ReadLine和NewLine方法 B:對於輸出緩衝流,寫出的資料,會先寫入到記憶體中,再使用flush方法將記憶體中的資料刷到硬碟。所以,在使用字元緩衝流的時候,一定要先flush,然後再close,避免資料丟失。
3-2-2轉換流 用於位元組資料到字元資料之間的轉換
1. InputStreamReader(要InputStream套接):位元組到字元的橋樑
2. OutputStreamWriter:字元到位元組的橋樑
A:字元流InputStreamReader位元組流通向字元流的橋樑
B:OutPutStreamWriter(要OutPutStream套接)字元流通向位元組流的橋樑
3-2-3資料流
提供讀寫java中基本資料型別的功能 DataInputStream/DataOutputStream
3-2-4物件流
用於直接將物件寫入寫出 ObjectInputStream /ObjectOutputStream 作用的物件必須實現Serializable介面
4.位元組流和字元流的轉換
4-1.位元組流轉字元流
概念:
位元組流(InputStream,OutPutStream)-》字元流(Reader,Writer)
實現方式:
利用這兩個類可以實現 InputStreamReader,OutputStreamWriter
package com.demo9aa.demo6;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Demo1 {
public static void main(String[] args) throws IOException {
//位元組流轉換為字元流【輸入流】
//模擬出位元組流
FileInputStream f=new FileInputStream("E:\\1.txt");
//位元組流轉換為字元流
InputStreamReader re=new InputStreamReader(f,"GBK");
BufferedReader reb=new BufferedReader(re);
//驗證是否成功
StringBuffer b=new StringBuffer();
String s=null;
while((s=reb.readLine())!=null){
b.append("\n"+s);
}
System.out.println(b.toString());
reb.close();
re.close();
f.close();
//位元組流轉換為字元流【輸出流】
OutputStreamWriter w=new OutputStreamWriter(new FileOutputStream("E:\\1.txt"), "GBK");
BufferedWriter ww=new BufferedWriter(w);
ww.write("中國夢");
ww.flush();
ww.close();
}
}
4-2.字元流轉換為位元組流
概念:
字元流(Reader,Writer) -》位元組流(InputStream,OutPutStream)
實現方式:
(1)利用字元流得到char[]資料
(2)char[]轉換為String;
(3)String的getByte()轉換為byte[]資料
(4)通過 ByteArrayInputStream和ByteArrayOutputStream 即可獲得位元組流
package com.demo9aa.demo6;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
//字元流轉位元組流[輸入]
//模擬出字元流
FileReader rr=new FileReader("E:\\1.txt");
//轉換過程
char[] c= new char[1024];
StringBuffer s=new StringBuffer();
while(rr.read(c, 0, c.length)!=-1){
s.append(String.valueOf(c));
}
ByteArrayInputStream in=new ByteArrayInputStream(s.toString().getBytes("GBK"));
//驗證轉換成功否
FileOutputStream f=new FileOutputStream("E:\\2.txt");
f.write(s.toString().getBytes("GBK"));
}
}