JAVA I/O小结(三)——字节流输入输出

JAVA I/O小结(三)——字节流输入输出

看此篇博文前推荐看看这篇几篇,有助于了解File类的各种方法和递归遍历方式
传送门:
JAVA I/O小结(一)——File类
JAVA I/O小结(二)——File类的递归遍历


I/O的分类

根据数据的流向区分:输入流输出流
根据数据的类型区分:字节流(8bit)字符流(16bit)

由此可得出如下表格:

 字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

在这章就主要讲解下字节流的输入输出

注意1:对I/O进行操作需要进行异常的抛出或者跳过,使用“throws”或者“try-catch”来处理异常
注意2:使用完I/O流后一定要关闭I/O流,遵循先开后关,后开先关的原则

字节流输入InputStream

这里的输入,是指从硬盘里的文件输入到内存中。可以理解为从文件中将数据输入到代码里,是文件对代码的输入

在读取操作中需要创建一个字节数组来存放输入的数据,在UTF-8编码中,中文每字占3字节,所以四个字需要至少12个字节,若在定义数组时不满足所需要的空间大小则会输出乱码,请一定保证预留的数组空间充足。

在读取操作中使用的read方法,在读取到数据末尾没有数据的时候会返回“-1”,所以可以进行一下读取操作,文件使用的是前几章所创建的文件。

具体操作代码如下:

try {
       FileInputStream in = new FileInputStream("./test123.txt");//指定从test123输入数据
       byte[] bytes = new byte[15];//读取数组的大小

       int len = 0;//设置读取数据的长度
       while(( len= in.read(bytes)) != -1){//这里先将读出的长度存入len,在判断read返回的数据是否为-1
           //System.out.println(len);//这里可以看到读取在循环内的len值,为数据的总字节长度
           System.out.println(new String(bytes,0,len));//new String(缓冲数据的数组,起始位,长度)
       }
       //System.out.println(len);//这里可以看到最终len的值,为-1

       in.close();//使用完一定要关闭流,一定!
     } catch (Exception e) { //因为异常很多,所以用Exception
         e.printStackTrace();
       }

结果:
Input结果
这里的结果并未向所展示代码中那样注释了“len”输出,可以看到“len”在while循环内输出的值为12,在循环外输出值为-1。因为在UTF-8编码中,一个中文字符占三个字节,所以阿巴阿巴 的长度输出为12个字节。

字节流输出OutputStream

这里的输出,是指从内存输出到硬盘里的文件中。可以理解为从代码中将数据输出到文件里,是代码对文件的输出

相比输入而言,输出就显得简单许多,要注意先“write”存到内存中,再“flush”写到硬盘里

代码如下:

try {
       FileOutputStream out = new FileOutputStream("./test123.txt");//制定从test123输出数据,默认覆盖写入,写入true为接在之前数据的后面继续写入
       String str = "玛卡巴卡";
       out.write(str.getBytes());//把数据写到内存中
       out.flush();//把内存的数据刷写到硬盘
       out.close();//使用完一定要关闭流
     } catch (Exception e) {//因为异常很多,所以用Exception
       e.printStackTrace();
       }

结果:
Output输出
这里就可以看到文件内数据被覆盖写入,从阿巴阿巴修改为玛卡巴卡


继续下一章学习:

JAVA I/O小结(四)——字节流方式实现复制操作

如有问题欢迎指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值