基础复习1-IO流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MrwanZH/article/details/84560913

IO流(任何流写默认都是覆盖)

  • 什么流就用什么数组接收,字节流byte[] b = reader.read(),字节流char[] c = reader.read()
  • 亚太地区编码GBK,reader.getEncoding() = GBK,idea默认格式GBK会导致读取中文文件错误,找不到文件
  • File->setting->Editor->File Encoding 改编码
  • 理论上java不存在内存泄漏,因为存在GC机制,当引用变量,对象信息在使用完毕后会自动调用gc实现内存的回收。但是如果在程序中使用了第三方资源,比如文件,网络,数据库连接等一些资源,GC无法回收,需要主动close
  • 转换流用于字节与字符流相互转换
  1. 字节流转字符流:输入Reader reader = new InputStreamReader(System.in);// 装饰器模式
  2. 字符流转字节流:输出Writer writer = new OutputStreamWriter(new FileOutputStream(File, true));
  • 高级流,不用定义缓冲区大小了,直接读一行

BufferedReader

BufferedWriter

BufferedInputStream

BufferedOutStream

  • 打印流,只包含输出流,不会抛出任何IOException

PrintStream:字节打印(字节输出),ps = new PrintStream(new File(“src/a.txt“)),pw.println(“字符串”);       pw.writer(“字符串”.getBytes());

PrintWriter:字符打印流调用println方法时,一定要调用刷新flush(),或者pw = new PrintWriter(new FileOutputStream(new File(), append:true), true),否则文件不会写入数据。调用writer方法时,在使用了true的同时还要调用close或者flush,否则还是不会写入数据。

使用flush的原因,数据存在于缓冲区中,调用flush将数据写入文件中。

       打印流和Buffered流互相装饰pw = new PrintWriter(new FileWriter(new File(“src/a.txt”)))

  • 追加输出 new FileOutputStream(File, true);在文件末尾追加输出,不加true覆盖
  • 随机访问流:往文件中间加数据,例如断网后下次下载要从上次下载的地方开始继续下。

RandomAccessFile。

RandomAccessFile特性:随机访问文件流,可以从文件的任意位置进行读与写,并且能够对java的基本数据类型进行直接读写。

  • 对象的序列化与反序列化1:对象序列化就是将一个java对象直接存储到文件,网络,等其他的存储介质中

实现步骤:1、让需要序列化的对象所属的类实现serializable接口

                  2、通过对象输出流(ObjectOutputStream.writeObject(object))将java对象写入文件

特性:只存储属性,不存储方法。Transient和static修饰的属性不被序列化

对象的序列化与反序列化2

实现步骤:1、让需要序列化的对象所属的类实现Externalizable接口

                  2、重写writeExternal和readExternal方法

                  3、通过对象输出流将java对象写入文件

特性:只存储属性,不存储方法。Transient和static修饰的属性不被序列化

猜你喜欢

转载自blog.csdn.net/MrwanZH/article/details/84560913