2016-01-23 79 views
0

我有一個客戶端服務器程序,我需要序列化文件對象並將其發送給客戶端。文件對象序列化

在服務器端:

FileInputStream input_file = new FileInputStream(file); 
object_output_stream.writeObject(input_file); 

在客戶端:

FileOutputStream ouput_file = new FileOutputStream(new File(filename)); 
output_file = object_input_stream.readObject(); 

我需要序列化INPUT_FILE對象,並將其發送給客戶端。 ObjectOutputStream和ObjectInputStream是不可序列化的。最好的辦法是什麼?

回答

0

不能序列化文件 - 這意味着客戶端可以從服務器上的文件讀取數據,這需要一個複雜的協議,而這個協議在Java序列化機制中根本不存在。

最好的辦法是將文件中的數據讀入字節數組,然後將字節數組明確地發送到客戶端,或者將ObjectOutputStream中的字節數組序列化(如果需要,您可以這樣做)發送其它目的以及)

您可以使用Apache的公地IOUtils.toByteArray(InputStream input)文件讀入byte[]容易。

在服務器端:

FileInputStream input_file = new FileInputStream(file); 
byte[] input_data = IOUtils.toByteArray(input_file); 
object_output_stream.writeObject(input_data); 

在客戶端:

FileOutputStream output_file = new FileOutputStream(new File(filename)); 
byte[] input_data = (byte[]) object_input_stream.readObject(); 
output_file.write(input_data);