我遇到了BufferedOutputStream的问题。我想通过套接字连接将Android设备中的kml文件发送到java服务器。 (连接正常,我已经能够在程序的其他部分与PrintWriter交换数据)
要发送我的kml文件,我填充缓冲区。但是当我冲洗它时,没有任何事情发生。
int lu = inFile.read();
while(lu != -1){
out.write(lu);
lu = inFile.read();
}
out.flush();
inFile.close();
inFile是我用来读取kml文件的流 out是我的BufferedOutputStream,使用socket的OutputStream
我不关闭我的对象,但我不想,我不会只使用它一次。这就是问题...... 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输出是关闭的
那么,如何在不关闭我的sokcet的情况下刷新缓冲区,无法打开新的输出流?
答案 0 :(得分:3)
Socket.close()
和Socket.shutdownOutput()
都向对等方发送EOS,他应该关闭套接字,之后你就不能再写入套接字了,因为你已经把它关闭了方向。
因此,如果您需要继续写入套接字,则无法使用这些方法中的任何一种。
您正在搜索的是一种划分应用程序协议消息的方法。至少有三种技术: