簡體   English   中英

從文本文件讀取二維字節數組時出現問題

[英]problems reading 2d byte array from a text file

我從已經將字節數組寫入其中的文本文件中讀取字節數組時遇到問題。

這是將字節數組寫入文件的代碼

    FileOutputStream fout = new FileOutputStream(new File("C:\\Users\\lvannini\\Desktop\\FileSystem\\diskFiles\\", fileName));
    for(int i = 0; i < 64; ++i){
        for(int j = 0; j < 64; ++j)
            fout.write(String.valueOf(ldisk[i][j]).getBytes());
        fout.write(System.lineSeparator().getBytes()); //write line break;

據我所知,這部分工作正常,因為我的輸出文本文件包含我正在使用的2d數組的適當內容。 文本文件的前9行示例如下所示:

00-1-16000000000000000000000000000000000000000000000000000000000000
00024000700000000000000090000000000071000100001100000000000800000000
-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000
-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000
-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000
-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000
-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000-1-1-1-1000000000000
10010010000001979899000021021111110000900000000000000010000000000000000800000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

但是,使用下面的代碼從文件讀回2D數組:

FileInputStream fin = new FileInputStream("C:\\Users\\lvannini\\Desktop\\FileSystem\\diskFiles\\" + fileName);
    for(int i = 0; i < 64; ++i)
        fin.read(ldisk[i]);

    fin.close();

給我讀取的每個字節的實際ASCII值。例如,讀取文本文件的第一行后,我的2d數組ldisk [0]包含:

48 48 45 49 45 49 54 48 48 48 . . .

我在哪里丟失了從字節值到ascii值的轉換? 我懷疑我將字節值錯誤地保存到了文本文件中。 任何建議/回應都非常感謝! 再次感謝。

我在哪里丟失了從字節值到ASCII值的轉換?

FileInputStream.read()為您提供該字節的ASCII碼。 請參閱ASCII表 ,它表明您沒有丟失翻譯內容。

只需將ASCII代碼轉換為字符代碼即可:

char c = (char)fin.read(ldisk[i]);

從中減去48得到整數值:

-48 + fin.read(ldisk[i])

您仍然需要處理占用字節的減號,因此您的

for(int i = 0; i < 64; ++i)

文件中有減號時,不足以64作為限制。

您的問題出在FileInputStream上。 有很多方法可以讀取每個字節的ASCII值,但最簡單的方法可能是具有已定義字符集的BufferedReader。

Charset charset = Charset.forName("US-ASCII");
BufferedReader in = Files.newBufferedReader(C:\\Users\\lvannini\\Desktop\\FileSystem\\diskFiles\\" + fileName, charset);

String line;
while((line = in.readLine()) != null)
{
   //do something with your input
}
in.close();

暫無
暫無

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

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