java的常見的字元位元組處理

2021-07-09 05:35:02 字數 1391 閱讀 7675

在最近在學習nio的過程中,溫習了以前學習的socket的io處理,發現最基礎的處理操作離不開bufferedreader和printwriter,他們對應著socket的輸入和輸出流物件。另外乙個問題是printwriter和printstream的區別。

printwriter和printstream的區別這個問題,我查了資料,主要在jdk的說明上和在stackoverflow上,下面是二者的總結:

printwriter實現了pritnstream的所有print方法。對於printstream,所有println方法都在內部呼叫相應的print方法,比如println(charx)的方法體就是呼叫print(x);再寫入乙個平台相關的換行符。printstream構建時會在內部new乙個bufferedwriter,所有print方法都在內部呼叫這個writer的write方法(write(string)或write(char))——對於print(char),直接呼叫write(char);對於其他的print方法,先用string.valueof獲得引數的字串表示,然後呼叫write(string)。 對於printwriter,所有println方法也都在內部呼叫print方法,print方法呼叫write方法。傳入outputstream時,printwriter會在內部構造乙個bufferedwriter;而傳入writer時,printstream內部直接使用該writer,此時printwriter是否進行了緩衝全看該writer。

上述的內容還需看下原始碼才能加深映象

bufferedreader進行readline什麼時候返回null
while(reader.ready())
ready是檢視流是否已經準備好被讀,是乙個非阻塞的方法,所以會立刻返回,由於伺服器沒有準備好被讀,所以會立刻返回,所以讀取到的都是null。

readline是乙個阻塞的方法,只要沒有斷開連線,就會一直等待,直到有東西返回,那麼什麼時候返回空呢,只有讀到資料流最末尾,才返回null。

特別要注意的是當reader.readline已經讀完之後,如果繼續執行ready操作,會返回false; 因此,下面兩段**可能造成死迴圈:

while(reader.readline()!==null)  

}while(reader.readline()!==null)

while(!reader.ready)

先寫這麼多,遇到問題在新增!

Java基礎,位元組字元

一 位元組 的定義 位元組 byte 是一種計量單位,表示資料量多少,它是計算機資訊技術用於計量儲存容量的一種計量單位。二 字元 的定義 字元是指計算機中使用的文字和符號,比如1 2 3 a b c 等等。三 位元組 與 字元 它們完全不是乙個位面的概念,所以兩者之間沒有 區別 這個說法。不同編碼裡...

Java 位元組流與字元流的轉換

inputstreamreader和outputstreamwriter,是用於將位元組流轉換成字元流來讀寫。inputstreamreader可以將乙個位元組流中的位元組解碼成字元後讀取。outputstreamwriter將字元編碼成位元組後寫入到乙個位元組流中 引數charsetname字符集...

Java位元組流和字元流的區別

簡單來說 位元組流不使用快取,字元流使用快取。位元組流直接把資料寫到檔案,而字元流先把資料寫到快取,再寫到檔案。寫檔案時 使用位元組流的時候,wirte之後,就算沒有關閉流 close方法 程式也把資料寫到檔案了 使用字元流的時候,write之後,如果沒有關閉流,開啟檔案後發現資料並沒有寫進去。當時...