nputStream、OutputStream:两个抽象类,是所有字节流的超类。
Reader、Writer:两个抽象类,是所有字符流的超类。
FileInputStream、:字节输入流。FileInputStream的read()方法返回的是读取的一个字节的十进制表示,read(byte[] arr)返回的是读取的字节数。注意:当用自定义的byte数组作为缓冲区时,当缓冲区大小不够一次性读入源中的数据时需要用while循环读取多次时,一定要用new String(arr,0,len)或者Write(arr,0,len)方法注明最后一次循环读取的len,因为在len后到arr.length之间的arr数组的值还是上一次循环时写入的值。
FileOutputStream:字节输出流。字节流的write()方法不经过缓冲区直接写入硬盘中。
FileReader:字符输入流,InputStreamReader的子类。read()方法返回的是一个字符的两个字节的二进制表示(具体原理还不清楚),read(byte[] arr)返回的是读取的字节数。注意事项同FileInputStream。
FileWriter:字符输出流,OutputStreamWriter的子类。注意:write()方法将数据先写入缓冲区,记得用flush()清空缓冲区将数据写入硬盘中。
BufferedReader(其余几个类似):FileReader类的包装类,提高了读取效率,readLine()方法一次读取一行字符(其实是调用System类中的System.getProperty("Line.separator")方法),返回值为String类型。
InputStreamReader(其余几个类似):字节流和字符流转换流。例:InputStreamReader isr=new InputSreamReader(System.in);
PrintWriter、PrintStream:打印流,print()不抛出IOException,能保持数据的表示形式。
SequenceInputStream:序列流,将多个流封装起来的流,用于将多个源写入一个目的。SequenceInputStream(Enumeration<? extends InputStream e>
ObjectInputStream、ObjectOutputStream:操作对象的流,被操作的对象需要实现Serializable接口(标记接口)。Serializable接口用于给被序列化的类加入ID号,如果一个类显式声明了SerialVersionUID,计算机会计算出一个ID号。
PipedInputStream、PipedOutStream:管道输入、输出流,输入流和输出流相接,建议使用多线程,单线程可能会发生死锁。
DataInputStream、DataOutputStream:基本数据读写流。
ByteArrayInputStream、ByteArrayOutputStream:字节数组读写流,关闭无效,因为只在内存中操作数据,没调用底层资源,不抛异常。
其它:
1、和输出流不同,FIle的creatNewFile()方法在文件已经存在时不会创建新文件去覆盖。
2、InputStreamde的availble()方法显示读取文件的大小。
3、deleteOnExit()在虚拟机退出时删掉文件。
4、文件夹有内容时delete()方法删不掉文件夹。
5、FilenameFileter接口中的accept(File dir,String name)方法实现后把实现类对象作为参数传入File的list()方法句可以按指定方式对得到的文件进行筛选。
6、transient关键字:加上这个关键字的成员不会被序列化。 |