2013-06-27 61 views
0

這裏是我有我的代碼:StringBuffer如何工作?它爲什麼這樣做?

 fis = openFileInput("MY_FILE"); 
     StringBuffer fileContent = new StringBuffer(""); 
     byte[] buffer = new byte[1024]; 
     while (fis.read(buffer) != -1) { 
      fileContent.append(new String(buffer)); 
     } 
     String myVariable = fileContent.toString().trim(); 

爲什麼StringBuffer的要求字節?這個工作到底如何?

將myVariable設置爲fileContent時,爲什麼在數據之後會有額外的空格? (假設MY_FILE包含文本「爸爸」)

在不修整的方法,它會將該變量設置爲: 爸


爸後一噸的空白。即使文本文件只是說「爸爸」

+4

還要注意的是幾乎沒有的情況下一個StringBuffer比StringBuilder的更合適。您應該使用StringBuilder。 – assylias

+0

它不直接觸及你的問題,但你爲什麼使用StringBuffer?你需要線程安全嗎?如果沒有,使用StringBuilder,它更快。 – Divers

+0

@Divers,我還是新來的Android,StringBuffer和StringBuilder最大的區別是什麼? – CynthiaDDurazo

回答

4

你得到空白,因爲當你的文本是「爸爸」時,你的緩衝區大小爲1024,這意味着緩衝區中有很多空的空間。

由於byte是原始數據類型,因此緩衝區中空白空間的內容不能爲空,而是默認爲0,將其轉換爲字符串時將其解釋爲空白。

+0

謝謝@RaghavSood,你用有意義的方式回答了我的問題,我可以理解:) – CynthiaDDurazo

2

原因是在Raghav Sood的回答中。您可以通過使用克服它:

byte[] buffer = new byte[1024]; 
int read = 0; // saves how many bytes were actually read 
while ((read = fis.read(buffer)) != -1) { 
    // don't use the complete buffer, only the used part of it. 
    fileContent.append(new String(buffer, 0, read)); 
} 
String myVariable = fileContent.toString(); 
相關問題