【发布时间】:2013-11-22 21:48:58
【问题描述】:
我正在从服务器接收一个文件,在客户端我想将此文件保存到一个目录中。这是保存文件的代码
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;
}
现在的问题是我在客户端保存的文件中获取垃圾数据。为了测试我是否从服务器接收纯数据,我在控制台中打印了文件的内容并得到了预期的结果。但是当我打开指定目录中保存的文件时,我得到了一些中文脚本,我该怎么办?请帮帮我。
【问题讨论】:
-
永远不要将文件读入一个字节[]。如果您不能 100% 确定大小,您可能会导致 OutOfMemoryErrors
-
我假设要保存的文件在 1KB 以内。如果我想变得更健壮,我该怎么办?在这种特殊情况下,字节数组的替代品是什么?
标签: java file byte fileinputstream fileoutputstream