繁体   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