我有一个 Kotlin 程序,我用它向远程主机提供文件。我正在尝试使用 curl 在远程主机上获取文件。对于纯文本文件,该程序对我来说效果很好,但对于 .jar 文件,它总是恰好丢失 5 个字节。另一方面,wget 可以正常工作并且不会丢失 5 个字节。
如果有用,这里是 Kotlin 代码
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 文件是在主机上创建的。
通过 scp 发送 jar 文件也可以正常工作并生成未损坏的文件。
无论使用 curl 还是 wget,kotlin 代码打印出来的总字节数都是正确的。
这种行为是 100% 可重复的:它总是正好缺少 5 个字节,仅适用于 jar 文件,无论我在多台接收机器上尝试过它。
显然这不是一个大问题,因为仅使用 wget 就可以正常工作,但我很好奇为什么首先会出现这个问题。
相关分类