20180828_老师笔记_IO流

IO流2

  1. 节点流 直接接在数据上  FileInputStream  FileOutputStream

 

FileinputStream 的read() 一个字节一个字节读取:  中文中占2个字节

  1. 1字符流  读写文本文件,   

图片,视频,音频  二进制文件   字节流  万能流

   FileReader  文件的字符输入流

常用方法:

 int

read()
          读取单个字符。-65536~ 65535

 int

read(char[] cbuf)
          将字符读入数组。

abstract  int

read(char[] cbuf, int off, int len)

字节输入流的方法:

 int

read()
          从此输入流中读取一个数据字节。 -128~127

 int

read(byte[] b)
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

 int

read(byte[] b, int off, int len)
          从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

 

   FileWriter 文件的字符输出流

     …

 

  1.2 内存流   

 

ByteArrayInputStream:

 构造方法:

ByteArrayInputStream(byte[] buf)
          创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。

ByteArrayInputStream(byte[] buf, int offset, int length)
          创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。

 

常用方法:

  

void

close()
          关闭 ByteArrayInputStream 无效。

int

read() 从buf数组读取一个字节
          从此输入流中读取下一个数据字节。

 int

read(byte[] b, int off, int len)
          将最多 len 个数据字节从此输入流读入 byte 数组。

 从buf数组中读取一个字节,存储在b的数组,从off开始,

 

ByteArrayOutputStream:

 

ByteArrayOutputStream()
          创建一个新的 byte 数组输出流。 

ByteArrayOutputStream(int size)  size表示创建的byte数组的长度

 

常用方法:

 void

write(byte[] b, int off, int len)
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流。

 void

write(int b)
          将指定的字节写入此 byte 数组输出流。

byte[]

toByteArray()
          创建一个新分配的 byte 数组。

String

toString()   把byte数组转换为字符串

void

close()
          关闭 ByteArrayOutputStream 无效。

 

2.处理流: 这种流不能直接接在数据,只能嵌套在其他IO流, 提供更加方便的方法

 2.1 缓冲流  带缓冲区(就是一个byte数组), 提高效率

   BufferedInputStream   BufferedOutputStream     字节缓冲流

   BufferedReader       BufferedWriter            字符缓冲流

// 有没有一种输入流, 读取一行,  返回这一行的字符串    

BufferedReader 的 readLine()

构造方法:

BufferedReader(Reader in)  需要一个字符输入流, 默认的缓冲区大小8KB

 

BufferedReader(Reader in, int sz)  sz  sz:就是byte的数组的长度

  char[]  ch = new char[8192];  以字节   8192/1024 =  8KB

 

//有没有一种输出流, 直接在文件中输出一个换行符      \n

    BufferedWriter  的newLine()

2.2 转换流   字节流  转换  字符流

   InputStreamReader: 把字节输入流转换为字符输入流, 本身就是Reader的子类

InputStreamReader(InputStream in)

 

  OutputStreamWriter:  把字节输出流转换为字符输出流,本身是Writer的子类

     OutputStreamWriter(OutputStream out)

2.3 打印流  输出流

输出流:

   write(int b)

write(byte[] b)

write(char[ ] c)

write(String str)

 

 

double d = 12.2;

 

1.字节打印流: PrintStream    print()   println()

2.字符打印流: PrintWriter

System.out.print()

System.out.println()

 

提供print(任意数据类型)   println(任意数据类型)

PrintStream(OutputStream out)
          创建新的打印流。

PrintStream(OutputStream out, boolean autoFlush)

 

PrintWriter:

PrintWriter(OutputStream out)   autoFlush默认值false
          根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。

PrintWriter(OutputStream out, boolean autoFlush)

 

2.4 对象流: 读写一个一个对象

   ObjectInputStream  : 对象输入流, Object  readObject()  读取一个对象

   ObjectOutputStream: 对象输出流,   writeObject(Object o )写一个对象

 

 

学生管理系统:

   学生à 数组  (固定长度)

à集合 à 保存到内存,  程序一旦关闭, 数据就没有

  • 把学生保存到文件(持久化)   IO流  à ObjectIO流
  • 学生信息保存到数据库

 

 

抛出: java.io.NotSerializableException: les06.Student

 序列化:  把java对象 转换为 流     二进制  ObjectOutputStream

 反序列化: 把二进制转换为java对象         ObjectInputStream

 

Java对象默认不支持序列化, 使用ObjectOutputStream进行序列化操作,抛出NotSerializableException

解决方案: 让java对象支持序列化, 在需要序列化的java对象的类上,实现 java.io.Serializable接口,他是一个标志接口,没有方法

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值