我有点卡住这个问题。在对象中存储字节数组,然后将其转换为ObjectOutputStream? (卡住)
我有这个FileDetails类存储文件的细节/元数据以及 整个文件在字节数组中。我想通过网络发送ObjectOutputStream中的FileDetails对象,接收者将在其中简单地读取文件并将其转换回FileDetails。
下面是代码:
class FileDetails {
private String fileName;
private long fileSize;
private byte[] fileData;
public FileDetails(String fileName, long fileSize, byte[] fileData) {
this.fileName = fileName;
this.fileSize = fileSize;
this.fileData = fileData;
}
public String getFileName() {
return fileName;
}
public long getFileSize() {
return fileSize;
}
public byte[] getFileData() {
return fileData;
}
}
File file = new File("C://test.dat");
RandomAccessFile randFileAccess = new RandomAccessFile(file, "r");
byte[] buff = new byte[(int) file.length()];
randFileAccess.readFully(buff);
FileDetails fd = new FileDetails(file.getname(), file.length(); buff);
FileOutputStream fos = = new FileOutputStream(C://oos.dat);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(fd);
oos.write(buff);
的问题是,该文件“TEST.DAT”是相当大的,它不是最佳的阅读它充分考虑一气呵成缓冲(很大)。我本来可以将 文件读入缓冲区中,但这需要我创建文件并将数据保存到磁盘中,而FileDetails对象使用字节数组时,我无法做到这一点。
我怎样才能解决这个问题?我只需要这种方法,即将数据作为字节数组存储在FileDetails对象中,然后将其转换为ObjectOutputStream,因为我将追加 追加ObjectOutStream文件的mp3文件信息并通过互联网发送。
任何暗示?还是另类办法?
编辑:其实我正在开发一个android应用程序。它将FileDetails对象中的文件元数据与字节数组中的文件数据一起存储。 将此FileDetails对象转换为ObjectOutputStream文件。现在,在此ObjectOutputStream文件前面附加了一个特定的mp3文件,该文件用于识别文件是否已由我的应用程序发送。 这个组合的mp3文件(包含“隐藏的”ObjectOutputStream文件)通过“流行”消息应用程序发送到接收器。 接收器通过他的“流行”消息应用下载mp3文件。现在我的应用程序开始运作。它识别mp3文件。并从mp3文件中提取ObjectOutputStream文件。并将其转换回FileDetails并使用其元数据检索原始文件。 我的方法是否正确?有没有其他方法来识别我的附加/隐藏文件?
非常感谢。
您可以自由定义发件人和收件人之间的协议吗?发送元数据(“细节”)作为对象,但附加“原始”字节,即通过从文件(例如test.dat)复制到输出流。这样可以避免将文件数据存储在字节数组中。 – laune 2015-02-08 13:44:17
我无法定义任何协议。其实我正在开发一个android应用程序,它使这个objectoutputstream文件,附加到mp3文件,然后通过另一个“流行”的消息应用程序发送这个MP3文件。接收器通过这个“流行”的消息应用下载这个mp3文件。现在我的应用程序开始运行并读取此mp3文件,如果mp3匹配了预定义的模式,它将读取objectoutputstream数据并将文件保存到SD卡。总而言之,这是一个将数据“隐藏”在mp3文件中的应用程序。 – Retr0spect 2015-02-08 13:53:03
但该对象输出流的发送者和接收者来自你?你定义了类FileDetails,不是吗 - 所以它必须在任何一端。 – laune 2015-02-08 13:57:20