Java中流的有關(guān)知識點詳解
什么是流?
流:程序和設(shè)備之間連接起來的一根用于數(shù)據(jù)傳輸?shù)墓艿?,流就是一根管道?/p>
流的分類:
- 四大基本抽象流(輸入流,輸出流,字符流,字節(jié)流)
- 文件流
- 緩沖流
- 轉(zhuǎn)換流
- 數(shù)據(jù)流 流一定是類,但類不一定是流
- print流
- object流
按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流。
按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流。(一個字符是兩個字節(jié))
按功能不同可以分為節(jié)點(原始)流和處理(包裹)流。
字節(jié)流 字符流
輸入流 InputStream Reader
輸出流 OutputStream Writer
文件流:
讀取一個文件內(nèi)容并將其輸出到顯示器上,并統(tǒng)計讀取出來的字節(jié)的個數(shù)。字符串來表示操作系統(tǒng)的文件路徑時,我們可以使用\\和/兩種方式來作為文件夾的路徑分隔符。
什么是字節(jié)流?
FileInputStream FileOutputStream
什么是字符流?
FileReader FileWriter
eg:
import java.awt.*;
public class test{
public static void main(String[] args){
FileReader fr=new FileRead("D:\\share\\test.java");
FileWriter fw=new FileWrite("d:/zhangsan.haha");
int ch;
ch=fr.read();
while(-1 != ch){
fw.write(ch); //將test文件中fr的數(shù)據(jù)讀給程序,再將程序中的數(shù)據(jù)寫給fw的zhangsan文件夾中
ch=fr.read();
}
fw.flush();
fr.close();
fw.close();
}
}
字符流和字節(jié)流的區(qū)別:
字節(jié)流可以完成所有格式文件的賦值
字符流值可以完成文本文件的復(fù)制,卻無法完成視頻格式文件的復(fù)制。
因為字節(jié)是不需要解碼和編碼的,將字節(jié)轉(zhuǎn)化為字符才存在解碼和編碼的問題。
字節(jié)流可以從所有格式的設(shè)備中讀取數(shù)據(jù),但字符流只能從文本格式的設(shè)備中讀寫數(shù)據(jù)。如果通過一個字節(jié)流把文本文件的內(nèi)容輸出到顯示器上,當(dāng)輸出漢字時就會出現(xiàn)亂碼。
緩沖流:Buffered
緩沖流就是帶有緩沖區(qū)的輸入輸出流
緩沖流可以顯著的減少我們對IO訪問的次數(shù),保護我們的硬盤。
緩沖流本身就是處理流,必須依附于節(jié)點流,處理流是包裹在原始節(jié)點上的流,相當(dāng)于包括在管道上的管道。
BufferedInputStream :帶緩沖的輸出流,允許一次向硬盤寫入多個字節(jié)的數(shù)據(jù)
BufferedOutputStream :帶緩沖區(qū)的輸入流,允許一次向程序中讀入多個字節(jié)的數(shù)據(jù)
BufferedWriter BufferedReader可以提高讀寫文本文件內(nèi)容的速度
eg:
import java.awt.*;//帶緩沖區(qū)的字節(jié)流處理文件的速度要快于不帶緩沖區(qū)的字節(jié)流。
public class test{
public static void main(String[] args){
BufferedInputStream bis=new BufferedInputStream (new FileRead("D:\\share\\test.java"));
BufferedOutputStream bos= new BufferedOutputStream (new FileWrite("d:/zhangsan.haha"));
byte[] buf=new byte[1024];
int len;
len=bis.read(buf);
while(-1 != len){
bos.write(buf,0,len );
len=bis.read(buf);
}
bos.flush();
bos.close();
bis.close();
}
}
轉(zhuǎn)換流:
outputStreamWrite 流是把OutputStrean流轉(zhuǎn)換成Writer流的流
inputStreamReader 流是把inputStrean流轉(zhuǎn)換成Reader流的流
print流:
print流只有輸出,沒有輸入
PrintWriter 輸出字符 PrintStream輸出字節(jié)
printWriter 與 printStream的區(qū)別:
printWriter提供了PrintStream的所有打印方法,既可以封裝OutputStream,也能封裝Writer.而PrintStream只能封裝OutputStream類型的字節(jié)流。
標準輸入輸出的重定向:
編程實現(xiàn)將鍵盤輸入的數(shù)據(jù)輸入到A文件中,如果輸入有誤,則把出錯信息輸出到B文件中。
eg:
public class test{
public static void main(String[] args){
PrintStream psOut=null;
PrintStream psError=null;
Scanner sc=null;
try{
psOut=new PrintStream("d:/Out.txt");
psError=new PrintStream("d:/error.txt");
sc=new Scanner(System.in);
int num;
System.setOut(psOut);
System.setErr(psError);
while(true){
num=sc.nextInt();
System.out.println(num);
}
}
catch(Exception e){
System.out.println("出錯信息是:");
e.printStackTrace();
}
}
}
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Java如何將字符串String轉(zhuǎn)換為整型Int
這篇文章主要介紹了Java如何將字符串String轉(zhuǎn)換為整型Int,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08
Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用講解
這篇文章主要介紹了Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11
基于SpringBoot和Dify實現(xiàn)流式響應(yīng)輸出
這篇文章主要為大家詳細介紹了如何基于SpringBoot和Dify實現(xiàn)流式響應(yīng)輸出效果,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下2025-03-03
java多線程抓取鈴聲多多官網(wǎng)的鈴聲數(shù)據(jù)
很容易就能發(fā)現(xiàn)通過改變 listId和page就能從服務(wù)器獲取鈴聲的json數(shù)據(jù), 通過解析json數(shù)據(jù), 可以看到都帶有{"hasmore":1,"curpage":1}這樣子的指示,通過判斷hasmore的值,決定是否進行下一頁的抓取。 但是通過上面這個鏈接返回的json中不帶有鈴聲的下載地址2016-04-04
最簡單的spring boot打包docker鏡像的實現(xiàn)
這篇文章主要介紹了最簡單的spring boot打包docker鏡像的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

