2010-06-10 166 views
35

請解釋字節流和字符流文件。這些意味着什麼,微軟的Word文檔是面向字節還是字符?字節流和字符流

謝謝

+7

親愛的downvoter - 請鼓勵作者提供更好的問題,留下一個不**爲什麼**你決定downvote(個人我沒有看到一個強有力的理由) – 2010-06-10 11:57:16

+2

打開記事本中的MS Word文檔。你看到了什麼?垃圾就像當你在記事本中打開一個'exe'一樣?它會然後是二進制數據:) – BalusC 2010-06-10 11:57:18

+0

我投這篇文章,因爲我從帖子中看到的是字節流和字符流之間的混淆。使用記事本解釋問題是沒有意義的。在我看來,傲慢者非常傲慢。 – Paul 2011-09-06 07:22:49

回答

46

流是順序訪問文件的一種方式。一個字節流逐字節地訪問該文件。字節流適用於任何類型的文件,但不適用於文本文件。例如,如果文件使用的是Unicode編碼,並且字符由兩個字節表示,則字節流將分開處理這些字符,您需要自行完成轉換。

字符流將逐個字符地讀取文件。字符流需要被賦予文件的編碼才能正常工作。

儘管Microsoft Word文檔包含文本,但無法使用字符流(它不是文本文件)進行訪問。您需要使用字節流來訪問它。

+0

感謝kgiannakakis, 和.txt文件呢? – JavaUser 2010-06-10 11:58:46

+2

字符流適合讀取.txt文件。但正如我所說,你需要知道文本文件的編碼。 – kgiannakakis 2010-06-10 12:00:19

+0

我在詢問有關.txt文件存在於Windows操作系統中 – JavaUser 2010-06-10 12:04:19

3

閱讀this。它告訴你字節和字符之間的區別(以及其他有用的東西的加載)

4

1.面向字符與數據類型綁定。只有字符串類型或字符類型可以通過它讀取,而面向字節的不綁定到任何數據類型,任何數據類型的數據都可以被讀取(字符串除外),只是必須指定它。

2.Character取向由字符讀取字符而面向字節由字節讀取字節

3.Character定向流使用字符編碼方案(UNICODE),而面向不使用任何編碼方案

4字節。面向字符的流也被稱爲讀取器和寫入流 面向字節流被稱爲數據流,數據流的輸入和輸出的數據流

10

字節流

從Oracle文檔頁面約byte streams

程序使用字節流來執行的8位字節的輸入和輸出。所有的字節流類都是從InputStreamOutputStream開始的。

enter image description here

何時使用:

字節流只能用於最原始的I/O

當不使用:

您不應該使用字節流來讀取字符流

例如,要讀取文本文件

字符流:

從Oracle文檔頁面約character streams

Java平臺存儲字符使用Unicode約定值。字符流I/O自動將此內部格式轉換爲本地字符集和從本地字符集轉換。

所有的字符流類都是從ReaderWriter開始的。

字節流通常是字節流的「包裝」。字符流使用字節流來執行物理I/O,而字符流處理字符和字節之間的轉換。

有兩個通用的字節到字符「橋」流:InputStreamReaderOutputStreamWriter

何時使用:

要閱讀的字符流的無論是從Socket或字符

File總結

字節流讀取和寫入一字節一次。在處理更復雜的數據時,我們必須避免使用字節流。

字符流和其他可用的流應該用來處理複雜的數據。

+0

這些概念總是很神祕。 [問題](https://stackoverflow.com/q/46953036/3317808) – overexchange 2017-10-26 11:56:31

0

字符流將逐字符地讀取文件。字符流能夠讀取16位字符(字節流讀取8位字符)。字符流能夠將8位數據隱式轉換爲16位數據,反之亦然。字符流可以支持ASCII,Unicode,UTF-8,UTF-16等所有類型的字符集。但字節流只適用於ASCII字符集。Java平臺使用Unicode約定存儲字符值。字符流I/O自動將此內部格式轉換爲本地字符集和從本地字符集轉換。

除非您正在處理二進制數據,例如圖像和聲音文件,否則您應該使用讀寫器來讀取和寫入字符流的信息。