Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.io.IOException:写入失败:EPIPE(管道断裂)_Java_Android_Io_Ipc - Fatal编程技术网

java.io.IOException:写入失败:EPIPE(管道断裂)

java.io.IOException:写入失败:EPIPE(管道断裂),java,android,io,ipc,Java,Android,Io,Ipc,您好,我在通过两个ParcelFileDescriptor之间的管道发送数据时遇到此错误 java.io.IOException: write failed: EPIPE (Broken pipe) at libcore.io.IoBridge.write(IoBridge.java:455) at java.io.FileOutputStream.write(FileOutputStream.java:187) at co

您好,我在通过两个
ParcelFileDescriptor之间的管道发送数据时遇到此错误

java.io.IOException: write failed: EPIPE (Broken pipe)
            at libcore.io.IoBridge.write(IoBridge.java:455)
            at java.io.FileOutputStream.write(FileOutputStream.java:187)
            at com.google.common.io.ByteStreams.copy(ByteStreams.java:179)
            at cz.simekadam.android.securedfileprovider.SecuredFileProvider$Pipe.run(SecuredFileProvider.java:161)
Caused by: libcore.io.ErrnoException: write failed: EPIPE (Broken pipe)
            at libcore.io.Posix.writeBytes(Native Method)
            at libcore.io.Posix.write(Posix.java:202)
            at libcore.io.BlockGuardOs.write(BlockGuardOs.java:197)
            at libcore.io.IoBridge.write(IoBridge.java:450)
            at java.io.FileOutputStream.write(FileOutputStream.java:187)
            at com.google.common.io.ByteStreams.copy(ByteStreams.java:179)
            at cz.simekadam.android.securedfileprovider.SecuredFileProvider$Pipe.run(SecuredFileProvider.java:161)    
这就是我复制数据的方式

static class PipeThread extends Thread {
    InputStream input;
    OutputStream out;

    PipeThread(InputStream inputStream, OutputStream out) {
        this.input=inputStream;
        this.out=out;
    }

    @Override
    public void run() {

        try {
            ByteStreams.copy(input, out);
            input.close();
            out.close();
        } catch (IOException e) {
            Log.e(getClass().getSimpleName(),
                "Exception transferring file", e);
        }

    }
}
我发现这可能与缺少根权限有关。我认为这不是我的问题,因为我没有写任何东西到任何文件夹。示例用例是将一个图像文件从我的contentProvider共享到一个像Skithch这样的应用程序。最后,有一件事让我抓狂。该过程成功完成,这意味着共享图像在skitch中打开时没有任何问题。我只是在我的控制台中使用它,我有点意识到它。我认为它不应该在那里:)


编辑:我已经对它进行了进一步的测试,它似乎只有在其他应用程序从我的ContentProvider读取时才可以复制。只有这样才会抛出异常。

您应该
.close()
在finally块中调用您的资源;如果
ByteStreams.copy()
失败,则您有一个资源泄漏。请签出:我已对其进行了编辑。您是否已设法修复它?我现在正在努力解决这个问题。