gpt4 book ai didi

java - 客户端发送大文件到服务器

转载 作者:行者123 更新时间:2023-12-01 23:01:17 25 4
gpt4 key购买 nike

我正在尝试将文件发送到我的服务器。我让它可以处理小于 100mb 的文件。否则我就用完了堆。所以我重新制作了它,但无法真正让它发挥作用。除了读取我陷入 bis.read(buffer) 中的最后一个数据之外,我还可以正常工作,因为它不知道文件何时结束。所以我尝试发送每个段的长度,以便 bufferedInputStream 知道何时停止读取。

知道出了什么问题吗?

发件人代码:

        FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[2048];
Integer bytesRead = 0;
BufferedOutputStream bos = new BufferedOutputStream(clientSocket.getOutputStream());
BufferedInputStream bis = new BufferedInputStream(fis);

while ((bytesRead = bis.read(buffer)) > 0) {
objectOutStream.writeObject(bytesRead);
bos.write(buffer, 0, bytesRead);

}
System.out.println("Sucess sending file");

接收者(服务器):

       fileName = request.getFileName();
int size = (int) request.getSize();

BufferedInputStream bis = new BufferedInputStream(clientSocket.getInputStream());

FileOutputStream fos = new FileOutputStream(fileName);
int totalBytesReceived = 0;
int blockSize = 0;
while (totalBytesReceived < size) {
Object o = ois.readObject();

if (!(o instanceof Integer)) {
System.out.println("Something is wrong");
}
blockSize = (Integer) o;

buffer = new byte[blockSize];

bis.read(buffer);
totalBytesReceived += blockSize;
fos.write(buffer, 0, blockSize);
}
System.out.println("File succes");

最佳答案

服务器端的读取代码应该与客户端相同。

// copy from bis to bos, using a buffer.
for(int len; (len = bis.read(buffer)) > 0) {
bos.write(buffer, 0, len);
}

在你想要的客户端

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filename));
BufferedOutputStream bos = new BufferedOutputStream(clientSocket.getOutputStream());

在您想要的服务器端。

BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));

完成后你想要

bos.close();
bis.close();

如果您打算使用 ObjectOutputStream(我建议您不要),您只需使用此流,而不是混合使用流。

关于java - 客户端发送大文件到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342134/

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