gpt4 book ai didi

java - 上传和下载文件时使用内存泄漏(可能是因为使用 ChannelSftp.get( "file_name") )?

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:13 25 4
gpt4 key购买 nike

您能介绍一下ChannelSftp.get("file_name")的内部工作原理吗?如果频繁使用该函数,使用该函数从文件列表(600个10kb的文件)中获取单个文件会导致Tomcat8内存泄漏问题吗?

这是用于从远程服务器上传和获取文件的代码。

public String connectRemote(String host, String user, String password, String 
remotePath, String sFileName) throws IOException, JSchException, SftpException
{
try {
String sFileNames ="";
Session session = connectSFTP(host, user, password);

Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp chan = (ChannelSftp) channel;

try {

String ftpRemoteDirectory = "/Irismedical/Outbox_Eligibility";

chan.cd(ftpRemoteDirectory);

File ftest = new File(sFileName);

chan.put(new FileInputStream(ftest), ftest.getName());

sFileNames = ftest.getName();

}
catch (Exception e) {
chan.disconnect();
session.disconnect();
return null;
}

chan.cd("/Irismedical/Inbox/Eligibility");

String sRes = null;
for (int i = 0;i<6 ; i++) {

try {
sRes = convertInputStreamToString(
chan.get(sFileNames+"_Response_271_1.edi"));

if (sRes != null ) {

break;

} catch (Exception e ) {
if (i<3) {
Thread.sleep(3000);
} else {
Thread.sleep(5000);
}
}
}
session.disconnect();

return sRes;
}
catch (Exception e) {
}
return null;
}
}

private static String convertInputStreamToString(InputStream inputStream)
throws IOException {

ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer, 0, length);
}

return result.toString(StandardCharsets.UTF_8.name());
}

最佳答案

您必须处置流。

上传代码中的 FileInputStream 和下载代码中 ChannelSftp.get 返回的 InputStream

参见Disposing streams in Java .

关于java - 上传和下载文件时使用内存泄漏(可能是因为使用 ChannelSftp.get( "file_name") )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com