gpt4 book ai didi

java - 为什么我在文件中收到垃圾数据?

转载 作者:行者123 更新时间:2023-12-02 06:30:01 25 4
gpt4 key购买 nike

我从服务器接收一个文件,在客户端中我想将此文件保存到目录中。这是保存文件的代码

          FileDetails obj1= (FileDetails)object;
String str= "A "+obj1.fileExtension+" Received From "+obj1.source;
JOptionPane.showMessageDialog(null,str,"Success", WIDTH, null);
FileOutputStream saveFile = new FileOutputStream("F:\\Download\\"+obj1.fileExtension);
ObjectOutputStream save = new ObjectOutputStream(saveFile);
byte[] buf= convertToByteArray(obj1.file);
save.write(buf);
save.close();

函数convertToByteArray如下

 private byte[] convertToByteArray(File file){       
try{
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];

for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
bos.flush();
System.out.println("read " + readNum + " bytes,");
}
byte[] bytes = bos.toByteArray();
return bytes;
} catch (IOException ex) {
ex.printStackTrace();
}
return null;
}

FileDetails 是一个可序列化的对象,其中包含服务器发送的文件和 fileExtension 中的文件名。该类如下 -

public class FileDetails implements Serializable{
public File file;
public String fileExtension;
public String source;
public String destination;

}

现在的问题是我在客户端保存的文件中收到垃圾数据。为了测试我是否从服务器接收纯数据,我在控制台中打印了文件的内容并得到了预期的结果。但是当我打开指定目录中保存的文件时,我得到一些中文脚本,我该怎么办?请帮帮我。

最佳答案

我认为,部分问题在于在记事本中查看该文件。如果我在另一个编辑器中打开该文件,例如使用二进制模式的 TextPad,我会看到该文件以序列化 header 开头。使用 ObjectOutputStream 将文件的二进制数据序列化为对象。我认为您想要做的是删除 ObjectOutputStream 行并将其更改为以下内容:

FileOutputStream saveFile = new FileOutputStream("F:\\Download\\"+obj1.fileExtension);
//ObjectOutputStream save = new ObjectOutputStream(saveFile);
byte[] buf= convertToByteArray(obj1.file);
saveFile.write(buf);
saveFile.close();

这只会写出文件的字节。

关于java - 为什么我在文件中收到垃圾数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20155104/

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