全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1324
推到 Plurk!
推到 Facebook!

宣告變數時怕太占記憶體了,該如何解決呢?

答題得分者是:neoart
ray521
一般會員


發表:6
回覆:0
積分:1
註冊:2004-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-14 01:02:52 IP:61.219.xxx.xxx 未訂閱
各位好,以下是我的問題 情況1:取出資料夾中的檔名時 File dir=new File("a\\"); String list1[]=dir.list(); 如果a這個資料夾裡的檔案有上萬個,或數十萬個 那這樣list1[]這個陣列不就超大的
情況2:以下的的程式碼為小弟我拿來複製檔案時的寫法 FileInputStream fi=new FileInputStream("a\\a.dat"); FileOutputStream fo=new FileOutputStream(b\\a.dat); byte data[]=new byte[fi.available()]; fi.read(data); fo.write(data); fi.close(); fo.close(); 在這裡我是以data這個位元陣列來存放a.dat 那要是a.dat這個檔案很大,上gb時 data這個陣列所佔的記憶體是不是也是超大的呢?
請問有人有更好的寫法來解決這2種情況嗎? 謝謝
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-14 07:30:51 IP:61.56.xxx.xxx 未訂閱
怕檔案太多,用 String list[]=dir.list(Filter)來過濾吧 怕"一檔獨大" ?  用 read(byte[],int offset,int len)來一段一段處理吧. ===============example=================================
    FileInputStream in = new FileInputStream(source);
    FileOutputStream out = new FileOutputStream(target);
    byte[] buf = new byte[BUF_SIZE];
    int i;
    while ((i = in.read(buf, 0, BUF_SIZE)) != -1)
      out.write(buf, 0, i);
    in.close();
    out.close();
================================================= 搬檔案. 用shell指令來做偷吃步也不錯說. 也許NIO(java new IO)有最佳化的一些新的指令也不錯,NIO好像只有英文版的樣子. ok,抄這麼多,不給人家註明來源會粉見笑的: http://forum.java.sun.com/thread.jsp?forum=31&thread=419020 http://java.sun.com/j2se/1.5.0/docs/api/java/io/InputStream.html#read(byte[],%20int,%20int) 發表人 - neoart 於 2004/05/14 07:53:34
系統時間:2024-05-09 8:15:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!