gpt4 book ai didi

java - 套接字编程: Inputstream Stuck in loop - read() always return 0

转载 作者:行者123 更新时间:2023-12-01 19:16:18 24 4
gpt4 key购买 nike

服务器端代码

public static boolean sendFile() {
int start = Integer.parseInt(startAndEnd[0]) - 1;
int end = Integer.parseInt(startAndEnd[1]) - 1;
int size = (end - start) + 1;

try {
bos = new BufferedOutputStream(initSocket.getOutputStream());
bos.write(byteArr,start,size);
bos.flush();
bos.close();
initSocket.close();
System.out.println("Send file to : " + initSocket);
} catch (IOException e) {
System.out.println(e.getLocalizedMessage());
disconnected();
return false;
}

return true;
}

客户端

public boolean receiveFile() {
int current = 0;

try {
int bytesRead = bis.read(byteArr,0,byteArr.length);
System.out.println("Receive file from : " + client);
current = bytesRead;
do {
bytesRead =
bis.read(byteArr, current, (byteArr.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead != -1);
bis.close();
bos.write(byteArr, 0 , current);
bos.flush();
bos.close();
} catch (IOException e) {
System.out.println(e.getLocalizedMessage());
disconnected();
return false;
}
return true;

}

客户端是多线程,服务器端不使用多线程。我只是粘贴了一些出现问题的代码,如果您想查看所有代码,请告诉我。

调试代码后,我发现如果我将 max thread 设置为any,那么第一个线程总是卡在这个循环中。 bis.read(....) 总是返回 0。尽管服务器有关闭流,但它不会跳出循环。我不知道为什么......但另一个线程工作正常。

do {
bytesRead =
bis.read(byteArr, current, (byteArr.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead != -1);

最佳答案

您的输入文件(您发送的文件?)有多大?“byteArr”有多大?另外,当您检查读取了多少字节时,您已经调用了 bis.read(..) 两次:

    int bytesRead = bis.read(byteArr,0,byteArr.length);

您可能想要读取/发送大于缓冲区的文件,因此您可能想要执行以下操作:

        byte [] buffer = new byte[4096];
int bytesRead;
int totalLength = 0;

while(-1 != (bytesRead = is.read(buffer))) {
bos.write(buffer, 0, bytesRead);
totalLength += bytesRead;
}
bos.close();
is.close();

“is”将是一个普通的InputStream,Peter是对的,你不需要缓冲它。

关于java - 套接字编程: Inputstream Stuck in loop - read() always return 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517108/

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