Java Curl删除最后5个字节,但wget工作正常
我有一个Kotlin程序,我正在使用它向远程主机提供文件。我正在尝试使用curl在远程主机上获取文件。对于纯文本文件,这个程序运行得很好,但是对于.jar文件,它总是丢失正好5个字节。另一方面,wget工作时没有任何问题,并且不会丢失5个字节 如果有用,这里是Kotlin代码Java Curl删除最后5个字节,但wget工作正常,java,curl,kotlin,wget,Java,Curl,Kotlin,Wget,我有一个Kotlin程序,我正在使用它向远程主机提供文件。我正在尝试使用curl在远程主机上获取文件。对于纯文本文件,这个程序运行得很好,但是对于.jar文件,它总是丢失正好5个字节。另一方面,wget工作时没有任何问题,并且不会丢失5个字节 如果有用,这里是Kotlin代码 val client = serverSocket.accept() val file = File(pathToFile) val bytes =
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就可以很好地工作,但我很好奇为什么首先会出现这个问题 根据wget文档,它支持http(s)和ftp(s)协议。你正在做的既不是。它之所以能够工作,很可能是因为它们以适合您的特定方式处理不兼容的http服务器 如果你想做你正在做的事情,你至少可以在文件内容前面放一个假的HTTP响应:
out.write("HTTP/1.1 200 OK\r\nContent-type: application/octet-stream\r\n\r\n"
.getBytes(StandardCharsets.US_ASCII));
啊,这是有道理的。我想我从来没有想过要把wget和curl看作只是读取字节流,因为这恰好是我想要从它们那里得到的。谢谢