gpt4 book ai didi

java - Curl 删除最后 5 个字节,但 wget 工作正常

转载 作者:行者123 更新时间:2023-11-30 02:02:44 26 4
gpt4 key购买 nike

我有一个 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 文件.jar 1.2.3.4:5678

curl 1.2.3.4:5678 -o 文件.jar

真实且可能相关的事情:

主机(运行上述 kotlin 代码)是 Windows 机器,接收者运行 linux。

jar 文件已在主机上创建。

通过 scp 发送 jar 文件也可以正常工作并生成未损坏的文件。

无论使用curl还是wget,kotlin代码打印的总字节数都是正确的。

此行为是 100% 可重复的:它总是恰好缺少 5 个字节,仅适用于 jar 文件,无论我在多台接收计算机上尝试如何。

显然这不是一个大问题,因为仅使用 wget 就可以正常工作,但我很好奇为什么会首先出现这个问题。

最佳答案

根据wget文档,它支持http(s)和ftp(s)协议(protocol)。你正在做的事情两者都不是。事实上,它能起作用很可能是因为它们以某种适合您的特定方式处理不兼容的 http 服务器。

如果你想做你正在做的事情,你至少可以在文件内容前面放置一个假的 HTTP 响应:

out.write("HTTP/1.1 200 OK\r\nContent-type: application/octet-stream\r\n\r\n"
.getBytes(StandardCharsets.US_ASCII));

关于java - Curl 删除最后 5 个字节,但 wget 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com