JavaIO流体系
JavaIO流的分类
- 从IO流的流向上分类
- 输入流(input reader):从外部数据输入到Java中
- 输出流(output writer):从Java内存中将数据输入到外部
- 从数据流的大小上分类
- 字节流:一个字节一个字节读取
- 字符流:一个字符一个字符读取
- 字符和字节之间是有关系的,一个字符会对应一个或者多个字节(取决于编码集)
- UTF-8 gbk
- 从流的功能上分类
- 节点流:直接连接到数据源上的流,但是功能比较局限,效率一般也不是很高
- 文件流:处理文件数据源的数据
文件字节流:FileInputStream FileOutputStream 文件字符流:FileReader FileWriter 文件输出流:可以选择追加写还是覆盖写 FileWriter(File,boolean)
- 数组流:处理数组数据源的数据
- 文件流:处理文件数据源的数据
- 处理流:用来包装节点流获取是其他的处理流,主要在节点流基础上提供了更高的效率和更加强大的功能
- **缓冲流:**包装一个文件流或者数组流或者是一个另外的一个转换流。使用缓冲流去处理数据效率比较高
字节缓冲流:BufferedInputStream BufferedOutputStream 字符缓冲流:BufferedReader readLine() BufferedWriter newLine()
- 转换流:普通的字符流在去处理文本数据的时候都有编码集解析乱码的问题。转换流可以解决编码解析乱码的问题
字符转换流: InputStreamReader 将一个字节流使用指定的编码集转换成为字符输入流 OutputStreamWriter 将一个字节输出流使用指定的编码集转换为字符输出流
- **缓冲流:**包装一个文件流或者数组流或者是一个另外的一个转换流。使用缓冲流去处理数据效率比较高
- 节点流:直接连接到数据源上的流,但是功能比较局限,效率一般也不是很高
JavaIO流的四个抽象父类以及常用方法
- 字节输入流InputStream
close():关闭流 read():int 读取流中的一个字节数据 返回0-255的值。如果IO流中没有数据了 返回-1 read(byte[] buf):int 根据buf字节数组的长度从流中读取长度个字节。 如果IO流中没有数据了 返回-1 avaliable():int 返回流中总共的字节数
- 字节输出流OutputStream
close():关闭流 write(int num)写出一个字节 0-255 write(byte[] buf) 写出一个字节数组 flush() 将流中的数据输出到目的地 对于节点流中字节输出流没有用
- 字符输入流Reader
close():关闭流 read():int 读取流中的一个字符数据 返回0-65535的值。如果IO流中没有数据了 返回-1 read(char[] buf):int 根据buf字符数组的长度从流中读取长度个字符。 如果IO流中没有数据了 返回-1
- 字符输出流Writer
close():关闭流 字符输出流的close方法关闭流的时候会掉用一次flush方法刷新流 write(int num)写出一个字符 0-65535 write(char[] buf) 写出一个字符数组 write(String str) 写出一个字符串 flush() 将流中的数据输出到目的地 字符输出流写完数据必须调用flush刷新数据
JavaIO流处理流的使用
- 对象流
- ObjectInputStream、ObjectOutputStream
ObjectInputStream是从二进制文件中读取数据称为Java对象---反序列化 ObjectOutputStream是将Java对象转成二进制数据 ----序列化
- 序列化和反序列化的概念
并不是所有的Java对象和Java类都能实现序列化和反序列化。只有实现了以下两个接口之一的Java类的对象才能被序列化或者反序列化 Serializable---比较常用的 让当前类的对象序列化的机制是,将类中的属性除了static和transient的修饰的 剩余全部进行序列化 Externalizable 让当前类的对象序列化的机制是,你得重写两个方法 一个序列化写的方法 一个是反序列化的方法 如果我们的Java类实现这两个接口之一,一般需要在类中增加一个静态常量属性 static final long serialVersionUID = xxxL
- ObjectInputStream、ObjectOutputStream
- 标准输入和输出流
System.out----PrintStream 标准输出 控制台输出 System.in---InputStream 标准输入 键盘输入
- 打印流
PrintStream PrintWriter 特点: 1、打印流都是输出流 2、打印流是一个处理流,但是可以开启自动刷新flush功能 3、打印流中提供了一系列的print和println的重载方法,可以输出各种各样类型的数据
Java注解的使用
- 注解是现在新型的Java的开发方式,被广泛的使用在JavaEE企业级开发领域
- 注解的好处可以帮助我们减少代码的冗余性,精简代码
- 自定义注解
访问控制修饰符 @interface 注解名{ 属性类型 属性名(); //如果注解中只有一个属性,一般属性名叫value }
- 注解中四大元注解
- 四大元注解是专门用来定义我们自定义注解存在的生命周期以及它可以声明在代码的什么位置。