Hi guys
I'm working on a simple app that sends multiple files over LAN or I-NET. The problem is that the app run seems to be non-deterministic. I keep getting this error on the client side:
java.io.UTFDataFormatException: malformed input around byte 5
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at service.DownloadManager.storeRawStream(DownloadManager.java:116)
at service.DownloadManager.downloadFiles(DownloadManager.java:47)
at manager.NetworkTransferClient$1.run(NetworkTransferClient.java:104)
The byte position changes every time I run a transfer. The error is caused by this line: String fileName = in.readUTF(); Here's the complete code:
Client
private void storeRawStream() {
try {
FileOutputStream fileOut;
int fileCount = in.readInt();
for(int i=0; i<fileCount; i++) {
byte data[] = new byte[BUFFER];
String fileName = in.readUTF();
fileOut = new FileOutputStream(new File(upload, fileName));
long fileLength = in.readLong();
for(int j=0; j<fileLength / BUFFER; j++) {
int totalCount = 0;
while(totalCount < BUFFER) {
int count = in.read(data, totalCount, BUFFER - totalCount);
totalCount += count;
}
fileOut.write(data, 0, totalCount);
fileOut.flush();
bytesRecieved += totalCount;
}
// read the remaining bytes
int count = in.read(data, 0, (int) (fileLength % BUFFER));
fileOut.write(data, 0, count);
fileOut.flush();
fileOut.close();
transferLog.append("File " + fileName + " recieved successfully.\n");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
Server
public void sendFiles(File[] files) throws Exception {
byte data[] = new byte[BUFFER];
FileInputStream fileInput;
out.writeInt(files.length);
for (int i=0; i<files.length; i++) {
// send the file name
out.writeUTF(files.getName());
// send the file length
out.writeLong(files[i].length());
fileInput = new FileInputStream(files[i]);
int count;
while((count = fileInput.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
bytesSent += count;
}
fileInput.close();
}
out.flush();
}
Does anybody know where's the problem? Thanx for any reply.