在使用datainputstream和bufferedinputstream接收文件时陷入无限循环



我正在尝试构建一个服务器程序,使用DataInputStream和BufferedInputStream从客户端接收文件。

这是我的代码,它陷入无限循环,我认为这是因为没有使用可用(),但我不是很确定。

DataInputStream din = new DataInputStream(new BufferedInputStream(s.getInputStream()));
//s is socket that connects fine
fos = new FileOutputStream(directory+"/"+filename);
byte b[] = new byte[512]; 
int readByte = din.read(b);
while(readByte != 1){
    fos.write(b);
    readByte = din.read(b);
    //System.out.println("infinite loop...");
}

谁能告诉我为什么它会陷入无限循环?如果是因为没有使用可用的你能告诉我怎么用吗?我实际上谷歌了一下,但我对用法感到困惑。非常感谢

我认为你想做while(readByte != -1)。请参阅文档(-1表示没有更多可读的内容)。

对评论的回应

这个对我有效:

FileInputStream in = new FileInputStream(new File("C:\Users\Rachel\Desktop\Test.txt"));
DataInputStream din = new DataInputStream(new BufferedInputStream(in));
FileOutputStream fos = new FileOutputStream("C:\Users\Rachel\Desktop\MyOtherFile.txt");
byte b[] = new byte[512]; 
while(din.read(b) != -1){
    fos.write(b);
}
System.out.println("Got out");

正如Rachel指出的那样,DataInputStream上的read方法返回成功读取的字节数,如果已经到达结束,则返回-1。循环直到到达终点的惯用方法是while(readByte != -1),而您错误地使用了1。如果从来没有恰好读取1字节的情况,那么这将是一个无限循环(一旦到达流的末端,readByte将永远不会从-1改变)。如果碰巧有一次迭代恰好读取了1个字节,这实际上会提前终止,而不是进入无限循环。

你的问题已经回答了,但是这个代码有另一个问题,下面更正。规范流复制循环如下所示:

while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}

相关内容

  • 没有找到相关文章

最新更新