Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
android,libaums:java.io.IOException:无法写入设备_Android_Sockets - Fatal编程技术网

android,libaums:java.io.IOException:无法写入设备

android,libaums:java.io.IOException:无法写入设备,android,sockets,Android,Sockets,我正在使用库将一些文件写入usb设备: private class CopyToUsbTask extends AsyncTask<CopyToUsbTaskParam, Integer, Void> { List<CopyToUsbTaskParam.SingleToUsbParam> paramList; private CopyToUsbTaskParam.SingleToUsbParam param; public CopyToUsb

我正在使用库将一些文件写入usb设备:

private class CopyToUsbTask extends AsyncTask<CopyToUsbTaskParam, Integer, Void> {


    List<CopyToUsbTaskParam.SingleToUsbParam> paramList;
    private CopyToUsbTaskParam.SingleToUsbParam param;

    public CopyToUsbTask() {
        Log.e(TAG, "CopyToUsbTask: Constructor");       
    }

    @Override
    protected Void doInBackground(CopyToUsbTaskParam... params) {
        paramList = params[0].paramList;
        while(!paramList.isEmpty() ){
            param = paramList.remove(0);
        long time = System.currentTimeMillis();

        queryUriMetaData(param.from);

        try {
            UsbFile root = currentFs.getRootDirectory();
            UsbFile dirTo = null;
            for(UsbFile usbFile : root.listFiles()){
                if(usbFile.getName().endsWith(param.toDir)){
                    dirTo = usbFile;
                }
            }

            UsbFile file = dirTo.createFile(param.name);  

            InputStream inputStream = activity.getContentResolver().openInputStream(param.from);
            OutputStream outputStream = UsbFileStreamFactory.createBufferedOutputStream(file, currentFs);

            byte[] bytes = new byte[1337];
            int count;
            long total = 0;

            while ((count = inputStream.read(bytes)) != -1){
                outputStream.write(bytes, 0, count);                 
            }

            outputStream.close();
            inputStream.close();
            file.close();

        } catch (IOException e) {
            Log.e(TAG, "error copying!", e);
        }
        Log.e(TAG, "copy time: " + (System.currentTimeMillis() - time));

    }return null;
    }
    @Override
    protected void onPostExecute(Void result) {

        int mid = Integer.valueOf(param.name.split("_")[0]);
        Log.e(TAG, "onPostExecute, mid= " + mid);
        Helper.deleteBookOrder(mid);        
    }
}
私有类CopyToUsbTask扩展异步任务{
列表参数列表;
私有CopyToUsbTaskParam.SingleToUsbParam参数;
公共CopyToUsbTask(){
Log.e(标记“copytusbtask:Constructor”);
}
@凌驾
受保护的Void doInBackground(CopyToUsbTaskParam…参数){
paramList=params[0]。paramList;
而(!paramList.isEmpty()){
param=paramList.remove(0);
长时间=System.currentTimeMillis();
queryUriMetaData(参数来源);
试一试{
UsbFile root=currentFs.getRootDirectory();
UsbFile dirTo=null;
对于(UsbFile UsbFile:root.listFiles()){
if(usbFile.getName().endsWith(param.toDir)){
dirTo=usbFile;
}
}
UsbFile file=dirTo.createFile(param.name);
InputStream InputStream=activity.getContentResolver().openInputStream(参数from);
OutputStream OutputStream=UsbFileStreamFactory.createBufferedOutputStream(文件,currentFs);
字节[]字节=新字节[1337];
整数计数;
长总计=0;
而((计数=inputStream.read(字节))!=-1){
outputStream.write(字节,0,计数);
}
outputStream.close();
inputStream.close();
file.close();
}捕获(IOE异常){
Log.e(标记“复制错误!”,e);
}
Log.e(标记,“复制时间:”+(System.currentTimeMillis()-time));
}返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
int mid=Integer.valueOf(param.name.split(“”)[0]);
Log.e(标记“onPostExecute,mid=“+mid”);
Helper.deleteBookOrder(mid);
}
}
有时(特别是当paramList.size()>1时),我会收到如下错误消息:

java.io.IOException:无法写入设备,结果==-1 errno 88对非套接字的套接字操作

找不到此错误消息的含义。
谢谢你的帮助

使用此库时,我遇到了类似的错误。在FileSystem.java中有一个名为getChunkSize()的方法,而不是使用静态缓冲区大小1337。可以使用该方法设置缓冲区大小。这似乎解决了我的问题

我还就这个问题向该库的开发人员发送了电子邮件,这是他的回复:

“所以这是一个奇怪的错误,每个人有时都会犯。通常情况下,拔下插头再插上是有效的。 我做了一些研究,发现-1只意味着存在某种错误。但实际的错误在Linux内核的errno变量中。我不知道如何从Android/Java获得这个值

我还发现: 他解释说,他发现端点被暂停,这也可能是事实。不幸的是,我真的不知道如何重置此暂停状态,他也没有真正解释。”


希望这有帮助

调用inputStream.read(字节)时出现类似错误 错误:“java.io.IOException:无法写入设备,结果==-1 errno 2无此类文件或目录”


使用InputStream的FileInputStream类解决了此问题。

在我设置file.setLength值后,错误似乎不会再次出现,如上面的链接所述。它再次出现。你能提供一些解决问题的代码吗?因为我遇到了同样的问题,无法找到解决办法。你能告诉我getChunkSize()的用法吗?你应该能在libaums中看到这个。byte[]bytes=new byte[currentFs.getChunkSize()];