对于服务端或者是客户端实质上传递的就是一种数据流的处理形式,而所谓的数据流指的就是字节数据。而对于这种流的处理形式在java.io包中提供有两类支持:
- 字节处理流:OutputStream()(输入字节流)、InputStream()(输入字节流);
- 字符处理流:Writer(输出字符流)、Reader(输入字符流);
所有的流操作都应采用如下统一的步骤进行,下面以文件处理的流程为例:
- 如果进行文件读写操作,则一定要通过File类找到一个文件路径;
- 通过字节流或字符流的子类为父类对象进行实例化;
- 利用字节流或字符流中的方法实现数据的输入与输出操作;
- 流的操作属于资源操作,资源操作必须进行关闭处理;
字节输出流:OutputStream
子节的数据以byte类型为主实现的操作,在进行字节内容输出的时候,可以使用OutputStream类完成,这个类的基本定义如下:
public abstract class OutputStream extends Object implements Closeable, Flushable{}
public interface Closeable extends AutoCloseable{
void close() throws IOException;
}
public interface Flushable{
void flush() throws IOException;
}
OutputStream类定义的是一个公共的输出操作标准,在这个操作标准中定义有三个内容输出的方法:
- 输出单个字节数据:public abstract void write(int b) throws IOException;
- 输出一组字节数据:public void write(byte[] b) throws IOException;
- 输出部分字节数据:public void write(byte[] b, int off, int len) throws IOException;
需要注意的是OutputStream是一个抽象类,而抽象类如果想要获得实例化对象就需要通过子类实例的向上转型完成。如果想要进行文件内容处理操作,可以使用子类FileOutputStream。
FileOutputStream的构造方法:
- 【覆盖】构造方法:public FileOutputStream(File file) throws FileNotFoundException;
- 【追加】构造方法:public FileOutputStream(File file, boolean append) throws FileNotFoundException
字节输入流:InputStream
InputStream类主要实现的就是字节数据读取,该类定义如下:
public abstract class InputStream extends Object implements Closeable{}
在InputStream类中定义有如下几个核心方法:
- 读取单个字节数据: public abstract int read() throws IOException、如果读取到底,返回-1;
- 读取一组字节数据: public int read(byte[] b) throws IOException、返回的读取的个数,如果读到底,返回-1;
- 读取一组字节数据的部分内容: public int read(byte[] b, int off, int len) throws IOException;
InputStream类属于一个抽象类,这时应该依靠它的子类来进行对象实例化,如果要从文件读取可以使用FileInputStream子类。
FileInputStream的构造方法
构造方法:public FileInputStream(File file) throws FileNotFoundException;
- 从JDK1.9开始,InputStream类中增加了一个新的方法:public byte[] readAllBytes() throws IOException;
|参考资料|
[1] 阿里云大学Java视频课程