我对BufferedOutputStream有点问题。我想通过套接字连接将一个kml文件从Android设备发送到java服务器。(连接正常,我已经能够与程序其他部分中的PrintWriter交换数据)
为了发送我的kml文件,我填充了缓冲区。但是当我刷新()它时,什么也没有发生。
int lu = inFile.read();
while(lu != -1){
out.write(lu);
lu = inFile.read();
}
out.flush();
inFile.close();inFile是我的流,用于使用套接字的OutputStream读出kml文件是我的BufferedOutputStream
我不会关闭out对象,但我不想这样做,我不会只使用它一次。这就是问题所在。close()方法发送缓冲区的数据,但也关闭套接字。flush()方法不发送缓冲区的数据。
我想在不关闭套接字的情况下刷新缓冲区。
我还尝试使用mySocket.shutdownOutput();
int lu = inFile.read();
while(lu != -1){
out.write(lu);
lu = inFile.read();
}
out.flush();
mySocket.shutdownOutput();
inFile.close();这个方法关闭我的流并保持我的套接字打开,这就是我想要的。但是当我尝试打开一个新的输出流时,异常java.net.SocketException: Socket output is shutdown
那么,如何在不关闭sokcet无法打开新输出流的情况下刷新缓冲区呢?
发布于 2012-05-25 18:18:22
Socket.close()和Socket.shutdownOutput()都向对等体发送了一个EOS,他应该在上面关闭套接字,然后您就不能再写套接字了,因为您已经在那个方向上关闭了套接字。
因此,如果需要继续写入套接字,则不能使用这两种方法中的任何一种。
可能您正在搜索的是一种分隔应用程序协议消息的方法。至少有三种技术:
https://stackoverflow.com/questions/10750733
复制相似问题