一問題
在學習流編程的過程中,我遇到了一下問題。首先來看一下我寫的java源程序:
package StreamLearn;
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) {
int count=0;
FileInputStream in=null;
try{
in =new FileInputStream("c:\\a.java");
}catch(FileNotFoundException e)
{
System.out.println("can not find it");
System.exit(1);
}
long num=0;
try{
while((count=in.read())!=-1){
System.out.print((char)count);
//System.out.println(count);
num++;
}
}catch(IOException e)
{
e.printStackTrace();
}
System.out.println("\n字符個數:"+num);
}
}
該代碼功能十分簡單,從a.java文件中讀取字符,並統計個數。讓我們來看一下a.java文件中的具體內容:

程序的運行結果如下:
123
456
字符個數:10
問題出現,本來只有6個字符為什么會變為8個字符呢?讓我們對源代碼進行改進:
package StreamLearn;
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) {
int count=0;
FileInputStream in=null;
try{
in =new FileInputStream("c:\\a.java");
}catch(FileNotFoundException e)
{
System.out.println("can not find it");
System.exit(1);
}
long num=0;
try{
while((count=in.read())!=-1){
//System.out.print((char)count);
System.out.println(count);
num++;
}
}catch(IOException e)
{
e.printStackTrace();
}
System.out.println("\n字符個數:"+num);
}
}
運行結果如下:
49
50
51
13
10
52
53
54
字符個數:8
查詢ASCII表,得知1對應ASCII值為49,一直到6為54。多出來的字符對應的ASCII值為13和10,其中13對應為歸位符,10為換行符。有關歸位與換行的區別請參考我的博客:
http://blog.csdn.net/leixingbang1989/article/details/12056193,在此不多介紹。
總結:
在文件中,換行需要占兩個字節,分別對應‘/r’‘/n’,在對文件字符進行統計與編碼時,應特別注重該問題。
