Java SFTP中每个文件的线程
我在SFTP服务器中读取文件并进行一些处理,问题是我的代码一个文件一个文件地运行,每个文件需要4到6个小时,我可以使用线程同时运行每个文件吗 这是我在函数中的代码Java SFTP中每个文件的线程,java,multithreading,jersey,sftp,Java,Multithreading,Jersey,Sftp,我在SFTP服务器中读取文件并进行一些处理,问题是我的代码一个文件一个文件地运行,每个文件需要4到6个小时,我可以使用线程同时运行每个文件吗 这是我在函数中的代码 sftpChannel = (ChannelSftp) channel; sftpChannel.cd("/upload"); Vector filelist = sftpChannel.ls("/upload/test"); List<St
sftpChannel = (ChannelSftp) channel;
sftpChannel.cd("/upload");
Vector filelist = sftpChannel.ls("/upload/test");
List<String> fileNameList = new ArrayList<String>();
String fileName = null;
for (int i = 0; i < filelist.size(); i++) {
ChannelSftp.LsEntry entry = (ChannelSftp.LsEntry) filelist.get(i);
if (entry.getFilename().startsWith("test")) {
fileName = entry.getFilename();
fileNameList.add(fileName);
}
}
if (fileNameList != null && !fileNameList.isEmpty()) {
for (int i = 0; i < fileNameList.size(); i++) {
fileSFTP = sftpChannel.get("/upload/test/" + fileNameList.get(i));
renamedFile = fileNameList.get(i);
// Open the file
String filename = "OTL";
File file = File.createTempFile(filename, ".zip");
// write the inputStream to a FileOutputStream
outputStream
= new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[2056];
while ((read = fileSFTP.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
if (file == null) {
return null;
}
JAXBContext jaxbContext = JAXBContext.newInstance(Message.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
itemObj = (Message) jaxbUnmarshaller.unmarshal(file);
buildJsonRequest(itemObj);
sftpChannel.rename("/upload/test/" + renamedFile,
"/upload/Loaded Test/" + renamedFile);
sftpChannel.cd("/upload/");
sftpChannel=(ChannelSftp)通道;
sftpChannel.cd(“/upload”);
Vector filelist=sftpChannel.ls(“/upload/test”);
List fileNameList=new ArrayList();
字符串文件名=null;
对于(int i=0;i
是的,你可以。为什么你不能?但我很难理解从SFTP服务器复制文件到本地驱动器可能需要4到6个小时。它们是如此巨大吗?如果是磁盘或网络让你速度变慢,多线程可能不会带来任何好处。谢谢你的回答,是的,每个文件中的数据都是巨大的,处理此问题的最佳方法是什么?@JBNizetIt取决于性能瓶颈是什么。是本地磁盘?本地网络速度?远程服务器磁盘?远程服务器网络?您与ISP的连接?您是从很远的地方检索文件吗?根据答案,使用少量线程可能会有所帮助。或者它会导致ght的影响很小。@StephenC是正确的。当带宽、磁盘或整个CPU成为瓶颈时,线程不会有帮助。如果网络延迟或CPU核心性能成为瓶颈,线程可以提供帮助。另请参阅