我正在尝试使用DataInputStream和BufferedInputStream构建一个从客户端接收文件的服务器程序。
这是我的代码,它属于无限循环,我认为这是因为没有使用available()但是我不太确定。
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...");
}
谁能告诉我为什么会陷入无限循环?如果是因为没有使用可用 你能告诉我怎么用吗?我实际上是谷歌搜索,但我对使用感到困惑。非常感谢你
答案 0 :(得分:2)
我想你想做while(readByte != -1)
。参见documentation(-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");
答案 1 :(得分:0)
正如Rachel所指出的,DataInputStream上的read
method返回成功读入的字节数,如果已达到结束,则返回-1。循环到达结尾的惯用方法是while(readByte != -1)
,而你错误地1
。如果从来没有读过恰好1个字节的情况,那么这将是一个无限循环(readByte
一旦达到流的末尾就永远不会从-1变化)。如果偶然有一个迭代,其中只读取1个字节,这实际上会提前终止,而不是进入无限循环。
答案 2 :(得分:0)
您的问题已经得到解答,但此代码还有另一个问题,请在下面进行更正。规范流复制循环如下所示:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}