Это упрощенная версия моей программы. У меня есть файл Server.java, в котором я читаю «b.txt» в байтовый массив, а затем записываю его в DataOutputStream.
import java.io.*;
import java.net.*;
class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(4000);
Socket s = ss.accept();
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
byte[] byteArray = new byte[32];
File tempFile = new File("Files/b.txt");
FileInputStream fis = new
FileInputStream(tempFile);
fis.read(byteArray);
fis.close();
dout.write(byteArray);
dout.flush();
dout.close();
s.close();
} catch (Exception e) {
//handle exceptions
}
}
}
В Client.java я считываю DataInputStream в byteArray. Затем я создаю FileOutputStream. В закомментированном коде fos.write (byteArray) это записывает в файл, однако, поскольку фактический файл может быть не ровно 32 байта, я остался с поврежденным файлом, так как оставшиеся байты просто заполняются случайными данными (или что-то происходит)).
import java.io.*;
import java.net.*;
class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 4000);
DataInputStream din = new DataInputStream(s.getInputStream());
byte[] byteArray = new byte[32];
FileOutputStream fos = new FileOutputStream("Downloaded/testfile.txt");
//fos.write(byteArray);
int count;
while ((count = din.read(byteArray)) > 0) {
fos.write(byteArray, 0, count);
}
fos.close();
din.close();
s.close();
} catch (Exception e) {
//handle exceptions
}
}
}
Итак, я посмотрел, как это исправить, и во многих местах мне сказали сделать код, который есть внутри цикла while: while ((count = din.read ... и т. Д.).
Однако, когда я пытаюсь это сделать, testfile.txt остается пустым и содержит 0 байтов. Я что-то упустил здесь? Я попытался отправить правильное количество байтов с сервера, однако это ничего не меняет.
Я хотел бы иметь возможность передавать файлы любого типа, поэтому важно, чтобы я мог передавать правильное количество байтов, не повреждая данные, так как байты "зависают". Спасибо.