我遇到二进制类型的问题。我有数据的二进制文件。每个元素都用“_”分隔。我正在使用
DataInputStream in = new DataInputStream(new FileInputStream("C:/Data/"+names));
,其中names是我的二进制文件的名称。我如何读取此文件并在数组中保存元素?这可能吗?
答案 0 :(得分:3)
写入二进制文件时,无需使用“_”拆分矩阵中的每个项目。程序知道为每个项目分配了多少字节。
以下代码在其间写入2个双打而不带“_”。之后,它会从文件中读取它们并输出数据。
public class Test {
public static void main(String[] args) throws Exception {
DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.bin"));
dos.writeDouble(1.2);
dos.writeDouble(3.4);
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream("a.bin"));
System.out.println(dis.readDouble());
System.out.println(dis.readDouble());
dis.close();
}
}
程序输出:
1.2
3.4
但是如果你没有写文件并且项目之间有'_',你可以在阅读二进制文件中的每个项目后使用readChar()
@Bhaskar已经提到过。
最后,使用ObjectOutputStream
可以一次写入整个数组。
public class Test {
public static void main(String[] args) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.bin"));
double[] a = {1.2, 3.4};
oos.writeObject(a);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.bin"));
double[] b = (double[]) ois.readObject();
System.out.println(b[0]);
System.out.println(b[1]);
ois.close();
}
}
答案 1 :(得分:1)
这取决于数据如何写入该文件。如果它是使用DataOutputStream
的{{1}}编写的,其中XXX代表元素的实际数据类型,并且元素由writeXXX()
分隔,那么您可以使用{轻松读取它们{1}}的{{1}}方法。只要确保按照编写的确切顺序读取元素,并且只要期望writeChar('_')
存在(即两个元素之间),就可以使用DataInputStream
。
答案 2 :(得分:0)
您可以使用read(byte[])
或read(byte[],ffset,length)
将文件内容读入字节数组。