从java
中的服务器程序中读取时,输出模糊不清:
byte [] mybytearray = new byte [content_length];
InputStream inputStream = clientSocket0.getInputStream(); //Getting input
from peer0
FileOutputStream fileOutputStream = new FileOutputStream(fileDownloaded);
//Sending the output to local directory
BufferedOutputStream bufferedOutputStream = new
BufferedOutputStream(fileOutputStream);
bytesRead = inputStream.read(mybytearray,0,content_length);
System.out.println("First read : " +bytesRead);
current = bytesRead;
if(bytesRead!=content_length) {
current = bytesRead;
do {
System.out.println(current +"-Current");
System.out.println("Read it : "+(mybytearray.length-current));
bytesRead =
inputStream.read(mybytearray, current, (mybytearray.length-current));
System.out.println("***"+bytesRead);
if(bytesRead == -1) {
//current = content_length;
break;
}
else
current += bytesRead;
} while(current < content_length );
}
bufferedOutputStream.write(mybytearray, 0 , current);
bufferedOutputStream.flush();
bufferedOutputStream.close();
inputStream.close();
inFromServer0.close();
它为某些文件提供以下输出:
内容长度33996
C:\用户\萨米特\ GIT中\ IP_Task2 \任务1 \对等方1 / rfc8183.txt.pdf
首先阅读:24356
24356电流
阅读:9640
*** - 1个
循环中的bytesRead为-1,因此无法创建正确的文件。
答案 0 :(得分:1)
每当您使用某个方法时,您应该阅读其文档以查看它可以返回的值。
查看InputStream.read(byte[], int, int)的说明:
public int read(byte [] b, int off, int len) 抛出IOException
将输入流中最多len个字节的数据读入一个字节数组。尝试读取len个字节,但可以读取较小的数字。实际读取的字节数以整数形式返回。
此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。
如果len为零,则不读取任何字节,返回0;否则,尝试读取至少一个字节。如果没有字节可用,因为流位于文件末尾,则返回值-1;否则,至少读取一个字节并存储到b。
读取的第一个字节存储在元素b [off]中,下一个读入b [off + 1],依此类推。读取的字节数最多等于len。设k为实际读取的字节数;这些字节将存储在元素b [off]到b [off + k-1]中,使元素b [off + k]到b [off + len-1]不受影响。
在每种情况下,元素b [0]到b [off]和元素b [off + len]到b [b.length-1]不受影响。
类InputStream的read(b,off,len)方法只是重复调用方法read()。如果第一个这样的调用导致IOException,则从对read(b,off,len)方法的调用返回该异常。如果对read()的任何后续调用导致IOException,则捕获该异常并将其视为文件结束;读取到该点的字节存储在b中,并返回在发生异常之前读取的字节数。此方法的默认实现将阻塞,直到读取了请求的输入数据len,检测到文件结尾或抛出异常为止。鼓励子类提供更有效的方法实现。
参数:
b - the buffer into which the data is read. off - the start offset in array b at which the data is written. len - the maximum number of bytes to read.
返回:
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
非常仔细地阅读最后一行。 -1是一个特殊的返回值,表示没有数据被读取,因为InputStream
中没有可用的附加输入。