首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android/Java -如何检查OutputStream何时完成字节写入

Android/Java -如何检查OutputStream何时完成字节写入
EN

Stack Overflow用户
提问于 2013-07-11 15:57:14
回答 2查看 5.2K关注 0票数 1

我已经创建了一个服务器套接字,它接受来自客户机的连接,当建立连接时,将使用写入字节的OutputStream将图像传输到它。我的问题是,在关闭套接字连接之前,我如何检查OutputStream是否已完成写入字节,因为有时并不是所有图像都正确传输。这是我使用的代码:

代码语言:javascript
运行
复制
File photoFile = new File(getHeader); //getHeader is the file that i have to transfer
int size2 = (int) photoFile.length();
byte[] bytes2 = new byte[size2];
try {
    BufferedInputStream buf = new BufferedInputStream(new FileInputStream(photoFile)); 
    buf.read(bytes2, 0, bytes2.length);
    buf.close();
    } catch (FileNotFoundException e) {
         e.printStackTrace();
    } catch (IOException e) {
         e.printStackTrace();
    }
    client.getOutputStream().write(bytes2, 0, size2); //client is the server socket

谢谢

EN

Stack Overflow用户

发布于 2013-07-11 16:02:58

我的问题是,在关闭套接字连接之前,如何检查OutputStream是否已完成写入字节,因为有时并不是所有图像都能正确传输

不,您的问题是您假设read()填充了缓冲区。当写入返回时,OutputStream已完成写入。记住这一点:

代码语言:javascript
运行
复制
while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

这是在Java中复制流的正确方法。你的不是。

您还假设文件大小适合int,,整个文件适合内存,并且在写入任何内容之前将整个文件(可能)读取到内存中是浪费时间和空间。上面的代码适用于1字节以上的任何大小的缓冲区。我通常使用8192字节。

票数 6
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17587996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档