FileOutputStream中的write()方法接受一個int,但會截斷前三個字節並將該字節寫入流中。 如果一個文件包含ASCII值大於127的字符,並從中讀取字節,然後寫入輸出流(另一個文本文件),它將如何顯示它,因爲在Java中字節可以具有+127的最大值。FileOutputStream中的寫入方法如何截斷int類型參數
如果一個文本文件(input.text)具有字符「>」的ASCII值是155 的輸入流,輸入,從它讀取: int in= new FileInputStream("input.txt").read();//in = 155
現在其寫入另一個文本文件(輸出.TXT)
new FileOutputStream("output.txt").write(in);
這裏整數 「中的」 被截斷爲字節,這將具有對應的十進制值:-101。 它如何成功地將字符寫入文件,即使關於它的信息似乎已經丟失?
剛纔我通過寫(int)方法的Java文檔的描述去了,我觀察到的是
寫一般的合同是一個字節寫入到輸出流。要寫入的字節是參數b的八個低位。 b的24位高位爲忽略。
所以,我認爲,相反的是我先前以爲(在寫的INT()被截斷,會發生,同時向下轉換的整數字節的值大於127)的24個高位僅僅忽略,只有考慮8個最低有效位。 不會截斷並轉換爲字節。 我想我是對的。
這意味着只有java認爲字節是有符號的,但是實際上將它寫入文件的底層系統(執行引擎)將它們視爲有符號並僅查看位模式。 此外,截斷確實發生在write()方法代碼中的某處,如下所示:「byte b =(byte)b」其中b是int作爲參數傳遞給寫入的int,可以找到。寫入參數實際上是類型轉換爲字節。 – userv
是的。截斷確實發生,但它不會導致任何信息丟失......假設您只是試圖寫一個8位的代碼點。如果你想看看它發生的細節,谷歌的源代碼。 –