当前位置: 代码迷 >> Java相关 >> java远程读写大文件效率有关问题
  详细解决方案

java远程读写大文件效率有关问题

热度:95   发布时间:2016-04-22 19:47:06.0
java远程读写大文件效率问题
我这边需要远程登陆一个linux服务器读取文件写入本地
所以不能用FILE类,因为File类是读本地的
代码如下

public void copyFile(String ip,String user,String pwd,String readFile,String writeFile){
 
try{
if(login(ip,user,pwd)){
                               //打开会话
Session session =conn.openSession();
String shPath = "cat ".concat(readFile);
//运行命令
session.execCommand(shPath);
//获取返回信息
stdOut=new StreamGobbler(session.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdOut));
                                Writer out = new FileWriter(new File(writeFile));  
                                String line;
while((line = br.readLine()) != null){
//System.out.println(line);
out.write(line.concat("\n"));
}
                          }catch(...){
                                   ...
                          }
     问题是这个是日志文件,有150几兆,用readline()是读一行写一行,效率太低了,读写完成个150兆的文件需要1分多钟
求各位大神指教下有什么更好的办法提高效率么,比如几行几行扫或者几兆几兆扫的                           
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

我觉得你这段代码是本地写入慢吧

没有用buffer write?

做过测试,不写入光读77秒
我这样写法读写也是77秒
所以跟写入基本没什么太大关系,问题就是一行行读太慢啦!


我猜你现在应该是通过ssh之类的直接到服务器上去执行了cat 命令,那你有没有试过直接通过nfs mount上,或者直接用scp copy到本地进行读写呢?

而且从你的代码来看,似乎就是一行一行的读出,再一行一行的写入,没有对内容进行操作。

直接scp全文件copy到本地不行么?


scp是 linux下的命令啊

你现在实际上也是远程执行了一个cat的命令,改一下,直接执行scp命令不就好了。
  相关解决方案