使用java.nio时引发IllegalArgumentException

使用java.nio时引发IllegalArgumentException,java,android,nio,Java,Android,Nio,正在尝试按url下载文件。为此,请使用java.nio库。上面的代码非常适合sdk 24及以上版本,但对于android sdk 23及以下版本,则会出现IllegalArgumentException。我在尝试传输数据时出错。亲爱的朋友,你能澄清一下问题出在哪里吗 private void downloadFile(final String itemUrl) { new Thread(new Runnable() { @Override

正在尝试按url下载文件。为此,请使用java.nio库。上面的代码非常适合sdk 24及以上版本,但对于android sdk 23及以下版本,则会出现IllegalArgumentException。我在尝试传输数据时出错。亲爱的朋友,你能澄清一下问题出在哪里吗

    private void downloadFile(final String itemUrl) {
        new Thread(new Runnable() {
            @Override
            public void run() {

                ReadableByteChannel readableByteChannel = null;
                FileOutputStream fOutStream = null;

                String root = 
                getApplicationContext().getApplicationInfo().dataDir;
                File myDir = new File(root + "/downloadedSongs");
                if (!myDir.exists()) {
                myDir.mkdirs();
                }

                File file = new File(myDir, itemTitle);
                if (file.exists()) {
                    file.delete();
                }

                try {
                    URL url = new URL(itemUrl);
                    readableByteChannel = 
                    Channels.newChannel(url.openStream());
                    fOutStream = new FileOutputStream(file);
      fOutStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);

                } catch (IOException e) {
                    orderAction = Enums.OrderAction.Delete;
                } catch (IllegalArgumentException e) {
                    orderAction = Enums.OrderAction.Delete;
                    Crashlytics.logException(e);
                } finally {
                    try {
                        if (fOutStream != null) {
                            fOutStream.close();
                        }
                        if (readableByteChannel != null) {
                           readableByteChannel.close();
                        }
                    } catch (IOException ioExObj) {
                        orderAction = Enums.OrderAction.Delete;
                    }
                    closeNotification(orderAction);
                }
            }
    }).start();
}


致命异常:java.lang.IllegalArgumentException:position=0 count=9223372036854775807位于java.nio.FileChannelImpl.transferFrom(FileChannelImpl.java:370)位于am.itsoft.youtomp3.services.DnlService$1.run(DnlService.java:169)位于java.lang.Thread.run(Thread.java:818)

原因在于此参数:Long.MAX\u值

右代码:

FileChannel destChannel = fOutStream.getChannel();
long blockSize;
if (Build.VERSION.SDK_INT > 23) {
  long blockSize = Long.MAX_VALUE;
} else {
  long blockSize = 8*1024;
}
long position = 0;
long loaded;
while ((loaded = destChannel.transferFrom(readableByteChannel, position, blockSize)) > 0) {
   position += loaded;
}

请用堆栈跟踪发布错误。亲爱的朋友,我已经更新了postammm。带有字符串“stackTrace”的屏幕截图并不是真正的堆栈跟踪…这就是我在firbase crashlitics中找到的所有内容:致命异常:java.lang.IllegalArgumentException:position=0 count=9223372036854775807在java.nio.FileChannelImpl.transferFrom(FileChannelImpl.java:370)在am.itsoft.youtop3.services.DnlService$1.run(DnlService.java:169)在java.lang.Thread.run(Thread.java:818)中,您可以展开第二个屏幕截图中的stacktrace项并发布您在那里看到的内容吗?