【发布时间】:2012-05-31 19:39:06
【问题描述】:
我遇到了 BufferedOutputStream 的问题。我想通过套接字连接将 kml 文件从 Android 设备发送到 java 服务器。 (连接正常,我已经能够与我程序的其他部分中的 PrintWriter 交换数据)
为了发送我的 kml 文件,我填充了缓冲区。但是当我刷新()它时,什么也没有发生。
int lu = inFile.read();
while(lu != -1){
out.write(lu);
lu = inFile.read();
}
out.flush();
inFile.close();
inFile 是我用来读取 kml 文件的流 out 是我使用套接字的 OutputStream 的 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 的情况下刷新我的缓冲区无法打开新的输出流?
【问题讨论】:
-
BufferedOutputStream 是哪种类型的 OutputStream?
-
使用 s.getOutputStream() 从套接字获取的输出流。
-
我认为您需要仔细查看服务器端实际发生的情况。您可以发布一些这样做的代码吗?我感觉@EJP 的答案是在正确的轨道上......
标签: java android networking flush bufferedoutputstream