socket编程时用ObjectInputstream出现了libcore.io.streams.readfully

发布于 2022-09-03 07:29:36 字数 1995 浏览 14 评论 0

具体是写一个Android和PC文件共享的小项目
Android端(以下为a).PC端(以下为p),a和p连接上后,a将p上的根目录显示,点击进入文件夹,我做的处理是,如果点击(发送被点击文件的路径)的是文件夹,那么就打开文件夹,如果点击的是文件就直接下载,而文件夹能直接打开,但是点击文件就直接抛io异常

p(服务器)的部分代码:

try
{
    ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
    DataInputStream dis = new DataInputStream(socket.getInputStream());
    String filePath = dis.readUTF(); //接收android端点击的文件的路径
    File selectFile = new File(filePath);
    if (selectFile.isDirectory()) // 文件夹, 就把文件夹内的所有子文件信息发送回去
    {
        oos.writeInt(1); // 发送是文件夹的标识
        // 略...
    }
    else// 文件就直接发送该文件
    {
        oos.writeInt(0); // 发送非文件夹的标识
        oos.writeUTF(selectFile.getName());
        System.out.println("正在下载" + selectFile.getName());
        FileInputStream fis = new FileInputStream(selectFile);
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        int len = 0;
        byte []buff = new byte[1024 * 1024];
        while ((len = fis.read(buff)) != -1)
        {
            dos.write(buff, 0, len);
        }
        fis.close();
    }
    socket.close();
}
catch (IOException e)
{
    e.printStackTrace();
}

a(客户端)部分代码

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

dos.writeUTF(path); // 发送被点击文件的路径
int isDir = ois.readInt(); // 接收是不是文件夹的标识 (这里如果点击文件夹就没问题, 但是如果是点击文件, 就在这里报错)
if (isDir == 1)
{
    // 略
} 
else
{
    String fileName = ois.readUTF();
    String filePath = ConnectActivity.myPath + "/download/" + fileName;
    Log.i("path2", filePath);
    FileOutputStream fos = new FileOutputStream(new File(filePath));

    DataInputStream dis = new DataInputStream(socket.getInputStream());
    int len = 0;
    byte[] buff = new byte[1024 * 1024];
    while ((len = dis.read(buff)) != -1)
    {
        fos.write(buff, 0, len);
    }
    Log.i("path2", filePath);
    fos.close();
}

求解???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

追星践月 2022-09-10 07:29:36

write要flush!
write要flush!
write要flush!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文