Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用字节缓冲区读取数据时避免垃圾数据_Java_Sockets_Tcp_Byte_Buffer - Fatal编程技术网

Java 使用字节缓冲区读取数据时避免垃圾数据

Java 使用字节缓冲区读取数据时避免垃圾数据,java,sockets,tcp,byte,buffer,Java,Sockets,Tcp,Byte,Buffer,我试图编写一个程序,使用java tcp套接字在客户机和服务器之间传输文件,我使用的缓冲区大小为64K,但我面临的问题是,当tcp有时无法发送整个64K时,它会在另一个go中发送剩余部分,例如32K 读取端的缓冲区会获取一些空格左右的垃圾数据,以完成64K,因此不必要的数据会使接收端的文件变得无用。 有没有解决这个问题的办法 我使用的是TCP协议,这段代码用来向客户端发送数据 服务器端代码 File transferFile=新文件(“Document.txt”); 字节[]字节数组=新字节[1

我试图编写一个程序,使用java tcp套接字在客户机和服务器之间传输文件,我使用的缓冲区大小为64K,但我面临的问题是,当tcp有时无法发送整个64K时,它会在另一个go中发送剩余部分,例如32K 读取端的缓冲区会获取一些空格左右的垃圾数据,以完成64K,因此不必要的数据会使接收端的文件变得无用。 有没有解决这个问题的办法

我使用的是TCP协议,这段代码用来向客户端发送数据

服务器端代码
File transferFile=新文件(“Document.txt”);
字节[]字节数组=新字节[1024];
int-byRead=0;
FileInputStream fin=新的FileInputStream(传输文件);
BufferedInputStream bin=新的BufferedInputStream(fin);
OutputStream os=socket.getOutputStream();
while(byRead>-1){
byRead=bin.read(bytearray,0,bytearray.length);
写操作(bytearray,0,bytearray.length);
os.flush();
}
客户端代码
byte[]bytearray=新字节[1024];
InputStream=socket.getInputStream();
FileOutputStream fos=新的FileOutputStream(“C:\\Users\\NetBeansProjects\\”+文件名);
BufferedOutputStream bos=新的BufferedOutputStream(fos);
bytesRead=is.read(bytearray,0,bytearray.length);
currentTot=字节读取;System.out.println(“正在读取数据…”);
做{
bytesRead=is.read(bytearray,0,(bytearray.length));
如果(bytesRead==0)继续;
如果(字节读取>=0)currentTot+=字节读取;
写入(bytearray,0,bytearray.length);
}while(bytesRead>-1);
在这里,如果字节为空,我试图通过continue跳过循环;声明,但事实并非如此 工作

这应该是

bos.write(bytearray,0,bytesRead);

缓冲区中“bytesRead”之后的区域不受读取的干扰。这不是“垃圾”。这只是以前的情况。

使用客户端代码,如下所示,以获得无垃圾的总写入字节数

int availableByte=socket.available();
如果(可用字节>0){
字节[]缓冲区=新字节[availableByte];
int bytesRead=socketInputStream.read(缓冲区);
FileOutputStream FileOutputStream=新的FileOutputStream(FilePath,true);
OutputStreamWriter OutputStreamWriter=新的OutputStreamWriter(fileOutputStream);
BufferedWriter BufferedWriter=新的BufferedWriter(outputStreamWriter);
bufferedWriter.write(buffer.toString());
bufferedWriter.close();
}

是的,解决方案是正确读取和写入流。很可能您没有正确使用java
read()
write()
方法。这是TCP还是UDP?你可能会发布一些代码吗?我已经添加了代码,请通知我哪里做错了。你必须写入字节读取字节数,而不是字节数组。字节长度。bytearray中字节读取后的区域是随机垃圾。虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
bos.write(bytearray,0,bytesRead);