我在从已经将字节数组写入的文本文件中读取字节数组时遇到问题。
以下是将字节数组写入文件
的代码 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值的转换?我怀疑我是否错误地将字节值保存到文本文件中。非常感谢任何建议/回应!再次感谢。
答案 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();