读取二进制文件';JAVA中的s
好的,我正在学习用java编写和读取二进制文件,这是我在谷歌搜索的任何地方都能得到的建议 这是加权类读取二进制文件';JAVA中的s,java,file,io,binary,data-storage,Java,File,Io,Binary,Data Storage,好的,我正在学习用java编写和读取二进制文件,这是我在谷歌搜索的任何地方都能得到的建议 这是加权类 public Writer(String fileName, String text) throws IOException { ObjectOutputStream output = null; try{ output = new ObjectOutputStream(new FileOutputStream(fileName,
public Writer(String fileName, String text) throws IOException {
ObjectOutputStream output = null;
try{
output = new ObjectOutputStream(new FileOutputStream(fileName, true));
} catch (FileNotFoundException e) {
System.out.println("File not found!");
System.exit(0);
} catch (IOException e) {
System.out.println("IO Exception!!");
System.exit(0);
}//THE TEXT HERE IS "test"
output.writeChars(text);
output.close();
System.out.println("Successful writing!");
}
这是阅读课
public Reader(String fileName) throws IOException {
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream(fileName));
} catch (FileNotFoundException e) {
System.out.println("File Not found!");
System.exit(0);
} catch (IOException e) {
System.out.println("IO Exception!!");
System.exit(0);
}
int i;
while ((i = in.read()) != -1){
System.out.print((char) i);
}
in.close();
}
但是我的输出是“每个字符之间都有正方形”对于二进制的非文本文件,
DataInputStream/DataOutputStream
更清晰
try (FileOutputStream fos = new FileOutputStream("test.bin");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeUTF8("La projekto celas ŝtopi breĉojn en Vikipedio");
dos.writeInt(42);
dos.writeDouble(Math.PI);
}
try (FileInputStream fis = new FileInputStream("test.bin");
DataInputStream dis = new DataInputStream(fis)) {
String s = dis.readUTF8(); // "La projekto celas ŝtopi breĉojn en Vikipedio"
int n = dis.readInt(); // 42
double pi = dis.readDouble() // Math.PI
}
writeUTF8
写入一个长度,并将其写入UTF-8编码的字符串。Unicode格式,因此可以编写任何脚本。你可以混合使用日语、希腊语、表情符号和保加利亚语。你使用writeChars
来书写字符,因此你应该使用readChar()
来再次阅读它们。方格可能是\0
(NUL)字符,因为每个字符被写入2个字节。您正在读取字节;字符不是字节。这就是为什么有不同的方法读取“二进制”数据和“文本”数据的原因之一。ObjectInput/OutputStream用于java对象,也存储类信息。对于二进制数据,输入/输出流就足够了。对于结构化二进制数据,可以使用ByteBuffer或DataInput/OutputStream。@JoopEggen您能给出一个代码示例吗