gpt4 book ai didi

java - RandomAccessFile java 格式错误的输入

转载 作者:行者123 更新时间:2023-12-01 20:52:19 25 4
gpt4 key购买 nike

我正在处理二进制文件,我正在尝试写入和读取它们,我有这两个函数:

 public static void ListToBin (List<ModelVehicle> llModVeh,List<Vehicle> llVeh,String NomFitxerXml){


try {
File ff = new File("pruebas.bin");
RandomAccessFile raf = new RandomAccessFile(ff, "rw");
int q = llModVeh.size();
raf.writeInt(q);
for (int i = 0; i < q; i++) {
for(ModelVehicle m : llModVeh){
raf.writeChars(m.getNom() );
raf.writeChars(m.getMarca());
raf.writeShort(m.getCilindrada());
}
}
raf.close();
} catch (FileNotFoundException ex) {

} catch (IOException ex) {

}
}

和:

 public static void BinToList(List<ModelVehicle> llModVeh,List<Vehicle> llVeh,String NomFitxerXml){
try {
llModVeh =new ArrayList();
File ff = new File("pruebas.bin");
RandomAccessFile raf = new RandomAccessFile(ff, "r");
int q = raf.readInt();
if (q < 0) {
throw new RuntimeException("Fitxer corrupte");
}
for (int i = 0; i < q; i++) {
String nom = raf.readUTF();
String marca = raf.readUTF();
Short cilindrada = raf.readShort();


}
raf.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}


}

当我使用函数 ListToBin 写入时一切正常,但是当我调用函数 BinToList 时我不断收到错误:

java.io.UTFDataFormatException: malformed input around byte 41

at java.io.DataInputStream.readUTF(DataInputStream.java:634) at java.io.RandomAccessFile.readUTF(RandomAccessFile.java:965) at info.infomila.Utils.BinToList(Utils.java:299) at info.infomila.Prova.main(Prova.java:84)

getMarca 和 getNom 返回一个字符串,getCilindrada 返回一个短值!

最佳答案

您正在使用 writeChars() 进行写入,它为每个字符写入 2 个字节。但是您使用 readUTF() 读取每个字符读取 1 个或更多字节(取决于字符)。

使用writeChars()readChars(),或者writeUTF()readUTF()

关于java - RandomAccessFile java 格式错误的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43032442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com