Я написал загрузчик, который должен использоваться для загрузки текстовых файлов, а также изображений. Поэтому я загружаю файлы в виде двоичных файлов. Многие из загрузок работают очень хорошо, но некоторые части текстовых файлов и многие файлы изображений повреждены. Ошибки происходят всегда в тех же файлах и в тех же местах (до тех пор, пока я могу сказать, анализируя текстовые файлы). Я использовал этот код для загрузки:Файлы, загруженные как двоичные с Java, повреждены
public File downloadFile(HttpURLConnection connection) {
return writeFileDataToFile(getFileData(connection));
}
//downloads the data of the file and returns the content as string
private List<Byte> getFileData(HttpURLConnection connection) {
List<Byte> fileData = new ArrayList<>();
try (InputStream input = connection.getInputStream()) {
byte[] fileChunk = new byte[8*1024];
int bytesRead;
do {
bytesRead = input.read(fileChunk);
if (bytesRead != -1) {
fileData.addAll(Bytes.asList(fileChunk));
fileChunk = new byte[8*1024];
}
} while (bytesRead != -1);
return fileData;
} catch (IOException e) {
System.out.println("Receiving file at " + url.toString() + " failed");
System.exit(1);
return null; //shouldn't be reached
}
}
//writes data to the file
private File writeFileDataToFile(List<Byte> fileData) {
if (!this.file.exists()) {
try {
this.file.getParentFile().mkdirs();
this.file.createNewFile();
} catch (IOException e) {
System.out.println("Error while creating file at " + file.getPath());
System.exit(1);
}
}
try (OutputStream output = new FileOutputStream(file)) {
output.write(Bytes.toArray(fileData));
return file;
} catch (IOException e) {
System.out.println("Error while accessing file at " + file.getPath());
System.exit(1);
return null;
}
}
Вы полагаете, что '' bytesRead' является -1' или '8192', что это такое MTU, как ~ 1500 байт? –