从文本文件中读取2d字节数组的问题

时间:2015-01-29 22:33:14

标签: java arrays io byte

我在从已经将字节数组写入的文本文件中读取字节数组时遇到问题。

以下是将字节数组写入文件

的代码
    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值的转换?我怀疑我是否错误地将字节值保存到文本文件中。非常感谢任何建议/回应!再次感谢。

2 个答案:

答案 0 :(得分:1)

  

我在哪里丢失从字节值到ASCII值的转换?

FileInputStream.read()正在为您提供该字节的ASCII代码。请参阅ASCII table,其中显示您没有丢失翻译。

只需将ASCII码转换为字符代码:

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

OR 从中减去48得到整数值:

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

你仍然需要处理占用字节的减号,所以你的

for(int i = 0; i < 64; ++i)
当文件中有减号时,

不足以64作为限制。

答案 1 :(得分:0)

你的问题在于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();