程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> stringbuffer-關於Java中FileInputStream類的一些新手疑問

stringbuffer-關於Java中FileInputStream類的一些新手疑問

編輯:編程解疑
關於Java中FileInputStream類的一些新手疑問

在每次使用FileInputStream的read方法時,需要用到字節數組bytes和真實讀取長度len,如代碼:

 public static void read(){
        File file = new File("D:/學習/Android/代碼/Workplace/Java_8_1_File/a.txt");
        try {
            //針對文件創建一個輸入流
            InputStream in = new FileInputStream(file);
            byte[] bytes = new byte[1024*1024*10];//定義一個10MB的字節數組
            int len = -1;//每次真實讀取的長度
            StringBuffer buf = new StringBuffer();

            try {
                while((len = in.read(bytes))!=-1){
                    buf.append(new String(bytes,0,len));
                }
                in.close();//關閉
                System.out.println(buf);
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

,其中在循環裡,buf.append那一句中,每一次都把0處len字節數加入到buf中,那麼倘若文件的數據是:
01234
為何最後輸出的結果不是:
001012012301234
呢?

最佳回答:


首先呢這個bytes是干什麼的?
緩沖區,就是防止大數據量的時候,我們每次只讀取一部分數據到緩沖區中進行操作
那麼這個len又是什麼呢?
它是實際的讀取字節的數

你如果學過數據結構就知道這是一種線性表的思想
因為有時候讀取的數據是不能填滿這個bytes的,那麼len就是實際的數

你抓住讀取思想:
每次都是讀取文件的bytes大小數據放到bytes數組中
所以取的時候自然是從bytes的0處去取
buf.append(new String(bytes,0,len));
加上len,用於防止最後一次的操作錯誤,最後一次取的數據實際長度是小於等於bytes的長度的,如果小於,那麼bytes還殘留著上次的數據。
所以使用len來讀取最後一次實際取的數據。

建議去看看線性表

fk002008
fk002008
fk002008
fk002008
sinat_33645256
fk002008
fk002008
sinat_33645256
sinat_33645256
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved