教程上说read返回的是整形数据,可是这个数据代表什么意思呢?import java.io.*;
public class FileApp {
  public static void main(String[] args){
  byte[] buffer=new byte[2056];
  try{
  FileInputStream fileIn = new FileInputStream("1.txt");
  int bytes=fileIn.read();
  System.out.println(bytes);
  }
  catch (Exception e){
  System.out.println(e);
  }
  }
}结果得到的是49。
说明:1.txt的内容是“12345678”

解决方案 »

  1.   

    返回的是asc码,0-128的整数,你可以通过char强制转换成字符型的。
      

  2.   

    楼上的正解,返回的是ASCII码值
    楼上的好快哟
      

  3.   

    答:不见得。若"1.txt"中放的是汉字呢?难道返回的是汉字的ascii码?此时用1楼的“char强制转换成字符型难道可以吗?
      

  4.   

    回3楼
    刚才把1.txt的内容改为“哈哈12345678”,经强制转换后,结果返回的是“?”不强制转换返回185,显然不是ASCII码。
    还是搞不懂。
      

  5.   


    是这样的,如果是中文的话,char转换就不会正常显示了。
      

  6.   

    写错..抱歉,一个汉字是2个字节组成的,虽然范围的是整数,但不只是这个范围。
    GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。所以中文的时候是根asc码没关系。
      

  7.   

    答:说得对。实际上返回的汉字的机内码。如:汉字'啊',排在16区1位,这是机内码,各加160得到机内码:176 161。这就是你读出的两个字节。当然,现在的默认字节编码是GBK,向下兼容GB2312。准确说:读出的是GBK的字节编码。而GBK中,前128正是标准的ASCII码表。这是为什么英文字符读出来就是ASCII的原因。
    若是字节文件,直接读出其中的字节。流结束是-1.
      

  8.   

    刚才又试了一下,把1.txt改为“abc12345678”,编码方式改为unicode,未强制转化返回255
    看来read返回值和文件的编码方式有关系。各位能否也试试,看看我的猜想是否正确?