1

以这种方式打开文件时:

RemoteFile remoteFile = sftpClient.open(path)

我在stacktrace中遇到了以下错误:

java.lang.ArrayIndexOutOfBoundsException:arraycopy:net.schmizz.sshj.connection.channel 处 net.schmizz.sshj.common.Buffer.putRawBytes(Buffer.java:271) 处的字节 [256] 的目标索引 -4 超出范围。 ChannelOutputStream$DataBuffer.write(ChannelOutputStream.java:64) 在 net.schmizz.sshj.connection.channel.ChannelOutputStream.write(ChannelOutputStream.java:141) 在 net.schmizz.sshj.connection.channel.ChannelOutputStream.write(ChannelOutputStream. java:131) 在 net.schmizz.sshj.sftp.SFTPEngine.transmit(SFTPEngine.java:292) 在 net.schmizz.sshj.sftp.SFTPEngine.request(SFTPEngine.java:130) 在 net.schmizz.sshj.sftp .SFTPEngine.doRequest(SFTPEngine.java:136) 在 net.schmizz.sshj.sftp.SFTPEngine.open(SFTPEngine.java:141) 在 net.schmizz.sshj.sftp.SFTPClient.open(SFTPClient.java:68) 在net.schmizz。sshj.sftp.SFTPClient.open(SFTPClient.java:73) 在 net.schmizz.sshj.sftp.SFTPClient.open(SFTPClient.java:78) 在 com.echovox.paidle.common.util.SftpUtil.getFileDataListFromZip(SftpUtil. java:86) at com.echovox.paidle.common.util.SftpUtil.lambda$getFileDataWithRetry$1(SftpUtil.java:139) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java。 util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)在 com.echovox.paidle.common.util.SftpUtil.getFileDataListFromZip(SftpUtil.java:86) 打开(SFTPClient.java:78)在 com.echovox.paidle.common.util.SftpUtil.lambda$getFileDataWithRetry$1(SftpUtil.java :139) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java. base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang。线程.run(线程.java:834)在 com.echovox.paidle.common.util.SftpUtil.getFileDataListFromZip(SftpUtil.java:86) 打开(SFTPClient.java:78)在 com.echovox.paidle.common.util.SftpUtil.lambda$getFileDataWithRetry$1(SftpUtil.java :139) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 在 java. base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang。线程.run(线程.java:834)lambda$getFileDataWithRetry$1(SftpUtil.java:139) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor .java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在java.base/java.lang.Thread.run(Thread.java:834)lambda$getFileDataWithRetry$1(SftpUtil.java:139) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor .java:304) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在java.base/java.lang.Thread.run(Thread.java:834)concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)

我发现了 3 个open方法的实现:

public RemoteFile open(String filename)

public RemoteFile open(String filename, Set<OpenMode> mode)

public RemoteFile open(String filename, Set<OpenMode> mode, FileAttributes attrs)

是否可以以某种方式使用Set<OpenMode> mode和/或FileAttributes attrs避免这个问题?

4

0 回答 0