0
我目前正在处理文件传输程序。但是,我正面临一个重大问题。我首先想知道为什么当我在一端收到文件时,它只会创建一个空文件。后来我发现,出于某种原因,我发送的对象与我收到的对象不同。 我发送一则短消息对象:发送的对象与收到的对象不同
public class Message implements Serializable {
private static final long serialVersionUID = 566740029496308507L;
private HashMap<MType, Object> map = new HashMap<MType, Object>();
public Message(MType id, Object value) {
map.put(id, value);
}
/* methods */
}
使用内部HashMap中,我所存储的值,如文件字节。
BufferedInputStream is = new BufferedInputStream(new FileInputStream(src));
Message msg = new Message(MType.FILE_OPEN, true);
com.transmit(msg);
byte[] buf = new byte[Utility.bufferSize];
msg = new Message(MType.FILE_NAME, src.getName());
msg.setValue(MType.FILE_SIZE, Files.size(src.toPath()));
com.transmit(msg);
for (int count = is.read(buf); count > 0; count = is.read(buf)) {
msg.setValue(MType.FILE_BYTE, buf);
msg.setValue(MType.FILE_COUNT, count);
com.transmit(msg);
System.out.println("File part sent");
}
System.out.println("File sending complete");
msg = new Message(MType.FILE_NAME, src.getName());
msg.setValue(MType.FILE_SIZE, Files.size(src.toPath()));
msg.setValue(MType.FILE_CLOSE, true);
is.close();
com.transmit(msg);
其中发送函数直接写入消息对象。但是,在接收端<我注意到发送的消息和收到的消息之间的差异。在接收端,发送消息,但其内部映射都不包含FILE_BYTE和FILE_COUNT值。就好像在循环中一样,它只是在循环之前发送'msg'的值,而不是考虑添加新值。 我知道这是因为我做了该消息的toString方法,这是它的样子:
发送消息:
============================================
USERNAME {
Bob
}
FILE_OPEN {
true
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_COUNT {
8192
}
FILE_BYTE {
[[email protected]
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_COUNT {
8192
}
FILE_BYTE {
[[email protected]
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_COUNT {
8192
}
FILE_BYTE {
[[email protected]
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_COUNT {
2676
}
FILE_BYTE {
[[email protected]
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_CLOSE {
true
}
FILE_SIZE {
27252
}
============================================
收到的消息:
============================================
USERNAME {
Bob
}
FILE_OPEN {
true
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
============================================
============================================
FILE_NAME {
logo.jpg
}
USERNAME {
Bob
}
FILE_SIZE {
27252
}
FILE_CLOSE {
true
}
============================================
如果有任何其他代码我应该发布,请让我知道。谢谢:)