簡體   English   中英

如何存儲字節並將其讀回數組

[英]How to store bytes and read them back to an array

我試圖將一個數字(字節)列表存儲到一個文件中,以便可以將它們檢索到一個字節[]中。

59 20 60 21 61 22 62 23 63 24 64 25 65 26 66 27 67 28 68 29 
67 30 66 31 65 32 64 33 63 34 62 35 61 36 60 37 59 38
66 29 65 30 64 31 63 32 62 33 61 34 60 35 59 36 58 37
65 28 64 29 63 30 62 31 61 32 60 33 59 34 58 35 57 36...

我嘗試將它們保存到文本文件中,但相關代碼似乎無法正確讀取它。

    try {
        File f = new File("cube_mapping2.txt");
        array = new byte[file.size()]
        FileInputStream stream = new FileInputStream(f);
        stream.read(array);
    } catch (Exception e) {
        e.printStackTrace();
    }

是否有保存文件的正確方法,以便FileInputReader.read(byte[] buffer)用我的字節填充數組?

我會使用Scanner 像這樣:

public static void main(String[] args) throws IOException {
    InputStream stream = new FileInputStream("cube_mapping2.txt");
    Scanner s = new Scanner(stream);
    List<Byte> bytes = new ArrayList<Byte>();
    while (s.hasNextByte()) {
        bytes.add(s.nextByte());
    }
    System.out.println(bytes);
}

我在包含您確切輸入的文件上對此進行了測試,並且可以正常工作。 輸出為:

[59, 20, 60, 21, 61, 22, 62, 23, 63, 24, 64, 25, 65, 26, 66, 27, 67, 28, 68, 29, 67, 30, 66, 31, 65, 32, 64, 33, 63, 34, 62, 35, 61, 36, 60, 37, 59, 38, 66, 29, 65, 30, 64, 31, 63, 32, 62, 33, 61, 34, 60, 35, 59, 36, 58, 37, 65, 28, 64, 29, 63, 30, 62, 31, 61, 32, 60, 33, 59, 34, 58, 35, 57, 36]

FileInputStream適用於二進制文件。 你的代碼將發布從二進制文件閱讀,但並不完全正確,因為stream.read(數組)中讀取數組的長度; 它不會保證讀取整個數組。 read(array)的返回值是實際讀取的字節數。 為了確保獲得所有想要的數據,您需要將read()調用置於循環中。

要回答您的實際問題:使用FileOutputStream.write(array)以stream.read(array)能夠將其讀回的方式寫入文件,請使用FileOutputStream.write(array)。

如果您對文本文件而不是二進制文件感到滿意,請使用@Bohemian的答案。

array = new byte[file.size()]

這是否意味着每個數字都沒有空間存儲單獨的標記? 根據您的字節數組,如果它們中的每個僅是兩個空格,則可以使用兩個空格的臨時字節數組來讀取存儲在文件中的每個字節。 就像是

byte[] temp = new byte[2];
stream.read(temp);

可以確保一一讀取字節數。

暫無
暫無

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

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