В настоящее время я работаю над программой передачи файлов. Тем не менее, я столкнулся с серьезной проблемой. Сначала я задавался вопросом, почему, когда я получал файлы на одном конце, он создавал бы пустой файл. Позже я узнал, что по какой-то причине объект, который я отправил, отличался от объекта, который я получил. я послал объект Сообщение:Объект отправлен отличается от полученного объекта
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
}
============================================
Если есть другой код Я должен опубликовать, пожалуйста, дайте мне знать. Спасибо :)