java中IO流分为几种
Java中io流根据多个维度进行:有数据流的方向(输入或者输出)、处理的数据单位(字节或者字符)、流的功能以及流是否支持随机访问等;
按照数据流方向如何划分?
- 输⼊流(Input Stream):从源(如⽂件、⽹络等)读取数据到程序。
- 输出流(Output Stream):数据从程序写出到目的地(如⽂件、⽹络、控制台等)。
按照数据单位如何划分?
- 字节流(Byte Stream):以字节为单位读写数据,主要用于处理二进制数据,如音频、图片文件等。
- 字符流(Character Streams):以字符为单位读写数据,主要用于处理文本数据。
按功能如何划分:
- 节点流(Node Streams):直接与数据源或者目的地相连,如 FileInputStream、FileOutputStream。
- 处理流(Processing Streams):对一个已经存在的流进行包装,如缓冲流 BufferedInputStream、BufferedOutputStream。
- 管道流(Piped Streams):用于线程之间的数据传输,如 PipedInputStream、PipedOutputStream。
IO流用到了什么设计模式?
IO流体系用到另一个设计模式—装饰器模式。
Java缓冲区溢出,如何预防
溢出主要是向缓冲区写入的数据超出缓冲区能够存储的数据量。有以下预防措施:
- **合理设置缓冲区的大小:**创建缓冲区的时,根据实际的需求合理设置缓冲区的大小。避免创建过大或者过小的缓冲区。
- **控制写入数据量:**在向缓冲区写⼊数据时,应该控制写⼊的数据量,确保不会超过缓冲区的容量。Java 的ByteBuffer 类提供了 remaining() ⽅法,可以获取缓冲区中剩余的可写⼊数据量。