Java基础-IO流详细学习笔记(字节流)
继续学习IO流的字节流部分,有关上部分的内容请点击Java基础-IO流详细学习笔记(字符流),本部分与上部分为对称关系,字符流部分掌握,这部分就掌握了
字节输入输出流的主要类为
OutputStream与InputStream,这两个都是抽象类,需要被继承,我们一般用他们的实现类FileInputStream与FileOutputStream
创建流对象,指定操作文件
OutputStream out =null ;
InputStream in = null ;
/*第一种构造器,参数为File对象*/
out = new FileOutputStream(new File("testIO2.txt")) ;
/*第二种构造器,参数为filename(string)false为否覆盖*/
out1 = new FileOutputStream("testIO2.txt",false) ;
/*字节流写入流构造器,参数为filename(string)*/
in = new FileInputStream("testIO2.txt") ;
Write写入
一般以数组形式进行写入
byte[] bs = {97,99,103,111} ; //展示的是asc码
out.write(bs);
注意:字节流不需要清洗缓存(flush)
Read读取
byte[] bs1 = new byte[2] ;//读取到的数据会被存入此数组
/*循环读取直至读完*/
int len = -1 ;//-1代表读不到东西了
while ((len = in.read(bs1))!=-1){ //判断是否读取完毕
String str = new String(bs1,0,len) ;//转化为字符串,由于覆盖关系,参数为读取到的数据的长度(保证有效数据)
System.out.println(str);
Buffered…
字节流高效缓冲区
原理与字符流基本一致,不再赘述
OutputStreamWriter/InputStreamWriter
字符流与字节流之间的转换桥梁
此部分主要考虑编码问题,比如我们需要控制输入与输出的编码,如控制流以GBK编码写入,以GBK编码读取(展示)
创建对象
OutputStreamWriter ow = null;
InputStreamReader ir = null ;
/*参数为out/inputstream对象*/
ow = new OutputStreamWriter(new FileOutputStream("testIO2.txt"),"utf-8")
ir = new InputStreamReader(new FileInputStream("testIO2.txt"),"utf-8") ;
读取与其他流完全一致
PrintWriter打印流
打印流只支持输出而无输入,分字符打印流和字节打印流,PrintWriter为字符打印流
功能:
- 打印各种数据类型
- 封装了字符输出流,也支持字符流和字节流的转化
- 自动刷新(flush)
- 支持直接向文件写数据
创建对象
PrintWriter pw = null ;
pw = new PrintWriter("testIO2.txt")
//pw = new PrintWriter(System.out) ->打印到控制台