IO流
IO:Input/Out
流:抽象的概念,表示数据传输
IO流:硬盘和内存之间数据传输(设备和设备),上传,复制,剪切...
分类:
流向:读input 写out
数据类型:
字符 字符输出 字符输入
字节 字节输出 字节输入
如何选择使用字符还是字节:
记事本打开,能看懂选择字符,看不懂选择字节
字节是万能的(电脑底层就是字0、1)
字节输出流:
抽象父类:OutPutStream
FileOutPutStream(String name)
使用步骤:
1.创建对象(1.调用系统创建空文件2.创建字节输出流对象3.让对象指向文件)
2.释放资源(关闭文件流并释放与此相关的资源)
3.调用写数据的方法(writer())
注意:默认情况下文件无论是否存在都会创建空文件
写的方法:
write(int b) 将指定的字节写入文件,一次写一个字节
write(byte[] b) 将指定的字节数组写入文件,一次写一个字节数组
write(byte[] b,int off,int len) 将指定的字节数组,从偏移量off开始写入文件,一次写len个字节,一次写数组的一部分
追加:
FileOutPutStream(String name,boolean append)
append的值默认为false,为true表示追加
换行符:
在文本文件中都是存在内容来表示换行符
windsow中\r\n
linux中\n
mac中\r
字节输入流:
抽象父类:InputStream
FileInputStream(String name)
使用步骤:
1.创建对象(1.调用系统创建空文件2.创建字节输出流对象3.让对象指向文件)
2.释放资源(关闭文件流并释放与此相关的资源)
3.调用读数据的方法(read())
字节缓冲流:避免了底层系统的多次调用
BufferedOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
BufferedInputStream:创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节。
构造方法:
BufferedOutputStream(OutputStream out)
BufferedInputStream(InputStream input)
注意:
字节缓冲流仅仅提供缓冲区,真正的读写数据还是依靠基本的字节流对象进行操作
使用BufferedOutputStream调用writer不在是直接写入到文件,而是写入到缓冲区
想要把数据写入到文件,有三种方式
1.flush
2.close
3.缓冲区满了自动刷新
编码和解码
二进制和字母或字符之间的转换规则
编码:
byte[] getBytes():使用平台的默认字符编码集将String存储字节数组
byte[] getBytes(String chareName):使用指定的编码集String存储字节数组
解码:
String(byte[] bytes):通过默认字符集解码指定的数组来构造新的String
String(byte[] bytes,String chareName):通过指定字符集解码指定的数组来构造新的String
注意:
编码和解码一定要保证一直,不然会出现乱码问题
常用编码集GBK和UTF-8
GBK是把一个字符转换成2个字节
UTF-8把一个字符转换成3个字节