java读取SFTP服务器上的大数据文件

suhao18 2013-07-30 10:12:00
我用java读取sftp上一个有300多万条数据的txt文件,文件大小500多M,代码如下

public FilePoJo read(String fileUid, String folderName) throws Exception {
ChannelSftp sftp = connect();
ByteArrayOutputStream writer = null;
FilePoJo pojo = null;

try {
sftp.cd(folderName);

writer = new ByteArrayOutputStream();
sftp.get(new String(fileUid.getBytes("UTF-8"), "ISO-8859-1"), writer);

byte[] content = writer.toByteArray();

pojo = new FilePoJo();
pojo.setName(getFileName(fileUid));
pojo.setUuid(fileUid);
pojo.setContent(content);
pojo.setExtendName(getExtendName(fileUid));

}
catch (SftpException e)
{
logger.error("execute read(fileUid, folderName) function failure, pls check the parameters of fileUid and folderName!");
throw e;
}
finally
{
if(writer != null)
{
writer.close();
}
disconnect(sftp);
}

return pojo;
}

每次执行到
sftp.get(new String(fileUid.getBytes("UTF-8"), "ISO-8859-1"), writer);
的时候就内存溢出了,请问有什么解决办法吗?
...全文
1137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
王二北 2013-07-31
  • 打赏
  • 举报
回复
多线程进行分段读取同一个文件,比如线程1读取0-1000长度的数据,线程2读取1001-2000长度的数据,等等,这一不仅可以充分的利用本机的cpu,也可以加大本机对服务器上的带宽的占用,下载会快一些
S117 2013-07-30
  • 打赏
  • 举报
回复
能不能在服务器段把文件压缩下呀!txt文件压缩比还是很大的!
suhao18 2013-07-30
  • 打赏
  • 举报
回复
你这个是处理本地文件吧?如果我直接把文件放到本地,不做切割也是可以读出来的,而且很快,解析加插入数据表也才不到3分钟。但是一旦从sftp服务器读就不行了。
vnicer 2013-07-30
  • 打赏
  • 举报
回复
引用 2 楼 suhao18 的回复:
怎么分批?把这个文件切割成几个文件吗?怎么切割?

将一个文件按照指定大小分割成诺干个小文件


换成txt格式就行了
suhao18 2013-07-30
  • 打赏
  • 举报
回复
怎么分批?把这个文件切割成几个文件吗?怎么切割?
oh_Maxy 2013-07-30
  • 打赏
  • 举报
回复
文件太大了,支持分批下载不?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧