1.流的分类
从不同角度分类:
按流动方向不同进行分类:输入流和输出流
按处理处理数据的不同分类:字节流和字符流
按功能不同分类:节点流和处理流
2.IO流的基本操作原理
1).使用File类找到一个文件对象,获得IO操作的源和目标
2).通过字节流或字符流的子类创建对象(得到IO通道)
3).进行读或写操作
4).关闭输入/输出流
这是由于流的操作是资源操作,所以在操作的最后一定关闭以释放资源。
例:
import java.io.*;
public class FileDemo{
public static void main(String[] args){
File f=new File("D:\\a.txt");
InputStream ins = new FileInputStream(f);
int len=0;
byte[] bytes=new byte[1024];
while((len=ins.read(bytes))!=-1){
len=ins.read(bytes,0,bytes.length);
System.out.println(new String(len));
}
ins.close();
}
}
3.当IO流进行写入操作时,我们可以先开辟一个内存缓冲区,程序每一次的write方法都是先写到这个缓冲区中,只有这个缓冲区 装满以后,系统才将这个缓冲区中的内容一次集中写入到外部设备。这样做的好处是有效的提高了CPU的使用率;write方法并没有真正写入到外部设备 ,还有机会回滚部分写入数据。
4.字节流和字符流在使用上的代码结构是非常类似的,但其本身内部有一些区别,因为在进行字符流操作的时候会使用到缓冲区,而字节流操作是不会使用到缓冲区的。
5.对于图片的复制,可以使用字符流,但是这样的话文件可以复制成功但是 无法读取!
6.无论使用字节流还是字符流实际上在内存中最终都是通过字节的形式来操作流的。 所以并没有字符流转换字节流。
7.字符流和字节流相比,使用字节流更加的方便,而且在程序中像图片,Mp3等都是采用字节的方式保存,那么肯定是字节流比字符流更加广泛。但是在操作中文的时候,用字符流更好,因为字节流可能出现乱码(一个汉字占两个字节,会分成了2份)。
8.内存流操作:先把数据写到内存中去,然后再从内存中读取出来!提升了性能!
9.建议使用缓冲流
10.static修饰的变量和transient修饰的数据是不可序列化的。但通过实现Externlizable接口重写方法是可以序列化的。但必须提供一个无参构造器。