簡體   English   中英

WriteBytes在我的文件中寫入字符串

[英]WriteBytes write String in my file

有一個我不明白的小問題。 我有一個字符串,我想將其寫入文件.txt中的字節(用於測試)。 這是我的代碼:

// Check writeVarString, writing in checkVarString.txt to verify 
fos = new FileOutputStream(pathCheckFile + "//checkVarString.txt");
dos = new DataOutputStream(fos);

VarInt.writeVarString("Test number  1 for function writeVarString()", dos);

這是我的函數writeVarString():

public static void writeVarString(String value, DataOutput out) throws IOException {
    try {
        int valueLength = value.length();

        if (valueLength > 0) {
            out.writeBytes(value);
        }
    }
    catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

好的,應該可以。 然后啟動我的應用程序,當我打開測試文件時得到以下信息:

測試函數writeVarString()的數字1

為什么我得到一個可讀的字符串? 我應該得到字節。 我已經嘗試過與byte [] array = value.getBytes()一起使用,然后使用out.write(array)但得到了相同的結果。

因為每個字符都作為字節存儲在文件中。 您的文本編輯器讀取字節,並使用字體將其與char匹配。 還存在用於字符串操作的編碼機制。 您可以使用十六進制編輯器或插件來查找字節/十六進制表示。

您做得正確。 文件中寫入的是字節。 實際上,您寫入文件的所有內容始終都是字節。

但是,當您讀取文件時,應用程序(文本編輯器,cat命令等)將始終嘗試將文件解釋為文本。

因此,您的解決方案是正確的,只是您看不到原始字節。

如writeBytes文檔中所指定:

void java.io.DataOutputStream.writeBytes(String s)拋出IOException

將字符串作為字節序列寫出到基礎輸出流中。 字符串中的每個字符通過丟棄高八位來依次寫出。 如果未引發異常,則寫入的計數器將增加s的長度。

請注意,它將“字符串作為字節序列寫入底層輸出流”,並且每個字符/整數/短/長是字節序列(本身就是位序列)。 因此,這只是計算機科學的基礎知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM