gpt4 book ai didi

java - Java套接字文件传输-文件不完整

转载 作者:行者123 更新时间:2023-12-03 11:55:29 25 4
gpt4 key购买 nike

我从服务器到客户端的文件传输有问题。事实是,即使文件有多大,也不会传输最后一个字节。假设我要下载一个56kb的文件,例如,我只收到35kb。

我将为您提供一些代码片段,也许有人可以看到任何错误的内容。

发件人:

public void sendFile(String fileName, Socket socket) {
try {
try {
File transferFile = new File(fileName);
byte[] bytearray = new byte[(int) transferFile.length()];
FileInputStream fin = new FileInputStream(transferFile);
BufferedInputStream bin = new BufferedInputStream(fin);
OutputStream os = socket.getOutputStream();
int bytesRead = 0;

while (-1 != (bytesRead = bin.read(bytearray, 0, bytearray.length))) {
os.write(bytearray, 0, bytesRead);
}

bin.close();
os.flush();
socket.close();
} catch (IOException e) {
System.out.println("error " + e);
}
} catch (Exception ex) {
System.out.println("error " + ex);
}
}

接收者:
public void downloadFile(Socket socket, String fName) {

try {
InputStream is = socket.getInputStream();

FileOutputStream fos = new FileOutputStream(fName);
BufferedOutputStream bos = new BufferedOutputStream(fos);

int count;
byte[] buffer = new byte[1024];

while ((count = is.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}

bos.flush();
bos.close();
} catch (Exception e) {
System.out.println("Error " + e);
}
}

欢迎任何帮助,谢谢。

最佳答案

如果while ((count = is.read(buffer)) > 0)返回零,则is.read()将打破循环。

但是,如果返回零,则不应假定已到达文件末尾,因为根据文档,零是要返回的完全有效的值。

您应该继续阅读,直到返回-1

此外,在关闭BufferedOutputStream bos之后,您还应该关闭FileOutputStream fos

关于java - Java套接字文件传输-文件不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33331047/

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