У меня есть программа Kotlin, которую я использую для передачи файла на удаленный хост. Я пытаюсь получить файл на удаленном хосте с помощью curl. Эта программа отлично подходит для файлов с чистым текстом, но для файлов .jar она всегда теряет ровно 5 байт. С другой стороны, wget работает без проблем и не теряет 5 байтов.
Здесь, в случае его полезности, указан код Котлина
val client = serverSocket.accept()
val file = File(pathToFile)
val bytes = ByteArray(16 * 1024)
val instream = FileInputStream(file)
val out = BufferedOutputStream(client.getOutputStream())
var count: Int
var sm = 0
count = instream.read(bytes)
while (count > 0) {
sm += count
out.write(bytes, 0, count)
count = instream.read(bytes)
}
print("total bytes : $sm")
out.flush()
out.close()
Вот команды curl и wget, которые я использую:
wget -O file.jar 1.2.3.4:5678
curl 1.2.3.4:5678 -o file.jar
Вещи, которые являются правдой и могут иметь отношение:
Хост (запускающий приведенный выше код kotlin) является машиной Windows, а получатель работает под управлением Linux.
Файл JAR был создан на хосте.
Отправка JAR-файла через scp также работает нормально и приводит к тому, что файл не поврежден.
Независимо от того, используется ли curl или wget, общее количество байтов, напечатанных кодом Котлина, является правильным.
Такое поведение повторяется на 100%: его всегда ровно 5 байт, только для файлов JAR, независимо от того, как я его пробовал на нескольких компьютерах-получателях.
Очевидно, что это не огромная проблема, поскольку просто использование wget работает нормально, но мне любопытно, почему эта проблема возникла в первую очередь.