3、InputStream
package com.io.file; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; //InputStream //(1)从流中读取数据 // int read() 读取一个字节,返回值为所读得字节 // int read(byte b[]) 读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际独取的 // 字节的数量。 // int read(byte b[] ,int off,int len)读取len个字节,放置到以下标off开始字节数组b中,返回值为实际 // 读取的字节的数量。 // int available() 返回值为流中尚未读取的字节的数量。 // long skip(long n);读指针跳过n个字节不读,返回值为实际跳过的字节数量 //(2)关闭流 // close() 流操作完毕后必须关闭 //(3)使用输入流中的标记 // void mark(int readlimit)纪录当前指针的所在位置.readlimit表示读指针读出的readlimit个字节后 // 所标记的指针位置才实效。 // void reset() 把读指针重新指向用mark方法所记录的位置 // boolean markSupported() 当前的流是否支持读指针的记录功能。 public class TestInputStream { public static void main(String[] args) throws IOException { File f = new File("E:" + File.separator + "单选题gbk.txt"); InputStream fis = new FileInputStream(f); System.out.println("未读之前的字节长度为 " + fis.available()); System.out.println("read()是读取一个字节,但是中文占两个字节,所以显示乱码,建议使用数组: " + (char) fis.read()); fis.read(); // System.out.println((char)(fis.read()+fis.read()));//乱码 // System.out.println(new String(new byte[]{(byte) fis.read(),(byte) // fis.read()},0,2));//乱码 // byte[] b=new byte[1024]; byte[] b = new byte[324]; int read = fis.read(b); System.out.println("实际读取字节的数量为 " + read); System.out.println("尚未读取的字节的数量为 " + fis.available()); System.out.println(new String(b, 0, read)); } }