2017-08-14 119 views
0

如果讀取方法從輸入流中讀取一個字節的數據,那麼當它必須讀取一個字符時,它是否會逐字節讀取兩次?作爲一個字符是2個字節?does Java.io.InputStream.read()方法讀取每個數據類型爲字節?

+0

你爲什麼不以DataInputStream類使用readChar? – tommybee

+0

所有數據都是字節,'read()'返回一個字節。 – Kayaman

+0

它*不*必須'讀'字符'。它被指定讀取字節,這就是它的作用。你的問題沒有意義。 – EJP

回答

1

InputStream對字節進行操作。它是Java中的基礎I/O抽象。它可以讀取單個字節或一系列字節,具體取決於調用者請求的內容。但它對字符一無所知,所以它本身不能決定爲字符讀取兩個字節。 A Reader將不得不請求這一點。

如果您需要閱讀字符,請使用ReaderInputStream中閱讀。

(同樣,讀取序列化的Java對象,你會使用ObjectInputStream,這再次從InputStream讀取他們。或者你也可以從InputStream使用Scanner從數字到文本讀取各種輸入一次。)

這種抽象的目的是責任的分離 -

  • InputStream提供的字節流,並處理所有底層邏輯(文件讀出/網絡/ ...)。
  • Reader將字節流轉換爲字符流,並且不關心數據來自何處。
相關問題