IO流-输入输出的简单实例
InputStream和OutputStream
抽象类InputStream和OutputStream是IO流最底层的两个抽象类,所有输入/输出流的类都基于这两个类.
这两个类里最核心的三个方法是read()和write(),以及close()
read() : InputStream类里的方法, 负责读取内容到输入流
write() : OutputStream类里的方法, 负责将内容输出.
close() : 两个类里都有这个方法, 负责关闭流,先关闭输入流,再关闭输出流
read()有3个重载方法,分别是:
public abstract int read() throws IOException : 每次读取1字节,以int形式返回这一字节的数据内容,全部读取完成时返回-1表示读取完毕
public int read(byte b[]) throws IOException : 读取数据到传入的byte数组中,返回读取的字节数,全部读取完毕时返回-1,该方法相当于read(b[], 0, b.length)
public int read(byte b[], int off, int len) throws IOException : off:表示从数组中的第几位开始存储数据 len:表示数组中使用的字节数. b[].length= off+len+剩余的字节数 ,返回值等同于read(byte b[])
***一个byte类型变量是1个字节,所以new byte[1024]是1KB(1024字节),1个英文字母或数字对应1字节容量***
FileInputStream和FileOutputStream的实例
@Test
public void test() {
//新建一个byte数组用来存储读到的数据,大小是1KB(1024字节)
byte[] oneByte = new byte[1024];
try {
//创建输入和输出流
FileInputStream inStream = new FileInputStream("C:/test/aaa.txt");
FileOutputStream outStream = new FileOutputStream("C:/test/bbb.txt");
//循环读取(read)aaa.txt文件的内容到oneByte,并输出到bbb.txt
//当文件读取完成时(返回-1),结束循环
while (inStream.read(oneByte) != -1) {
//把刚读到的内容输出到bbb.txt
outStream.write(oneByte);
}
//最后一定记得关闭输入输出流,先输入,在输出
inStream.close();
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
注意:
1.如果文件体积小于byte数组(),输出时仍将完整的输出byte数组中的数据,包括未赋值的null,看下图
文件体积6字节,byte数组容量调整为8字节.

2.如果文件体积大于byte数组,但最后一次读取的数据体积小于byte数组,这将造成一些问题,因为byte数组在赋值前并未被清空,所以byte数组中仍会保留一部分上次循环中存储的数据.看下图
文件体积字节,把byte数组容量调成字节,可以看到,byte数组中未被覆盖的数据(上次循环时的数据)在第二次循环中被输出(红框部分)

使用public int read(byte b[], int off, int len) throws IOException
还是上边的代码,read(byte b[])改成用read(byte b[], int off, int len)方法,其他不变,罗列情况如下
1.文件体积6字节,byte数组容量8字节,read(b[], 0, 8)

2.文件体积6字节,byte数组容量8字节,read(b[], 1, 6)

3.文件体积6字节,byte数组容量8字节,read(b[], 1, 8)
数组下标越界,因为1+8>b[].length
IO流-输入输出的简单实例的更多相关文章
- 呆呆的io流输入输出的一些基础
关于io流的File类,下面来码一些基础属性: 文件的属性: /* public String getName() 获取文件的名字 public boolean canRead() 判断文件是否可以读 ...
- Java学习笔记43(打印流、IO流工具类简单介绍)
打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(Outpu ...
- java io 流 输入输出 大牛经典总结
在软件开发中,数据流和数据库操作占据了一个很重要的位置,所以,熟悉操作数据流和数据库,对于每一个开发者来说都是很重要的,今天就来总结一下I/O,数据库操作 一:从数据流开始 首先先有一个结构图看一下整 ...
- Java通过IO流输入输出 向文件中存入大量三个属性的值,并通过验证前两个属性输出第三个属性
package ABC1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import ...
- 使用IO流实现一个简单的小Dome
(一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去:之后遍历IOTest ...
- IO流-输入输出
java的I/O技术可以将数据保存到文本.二进制.ZIP压缩文件中,下面来说说一些基本的常识(今天只讲理论).先来说说流,何为流?“流就是一组有序的数据序列,根据操作的类型,可以分为输入(Input) ...
- 【Java】Swing+IO流实现一个简单的文件加密程序(较完整版)
留着参考 beans package com.my.bean; import java.io.Serializable; public class EncryptedFile implements S ...
- 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
留着参考 EncrytService package com.my.service; import java.io.File; import java.io.FileInputStream; impo ...
- IO流读写数据简单示例
常用的字节输入流有:InputStream ,FileInputStream,BufferedInputStream 常用的字节输出流有:OutputStream,FileOutputStream,B ...
随机推荐
- HTML 基本语法速查
HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head& ...
- 【JVM虚拟机】(9)-- JVM是如何处理异常的
[JVM虚拟机](9)-- JVM是如何处理异常的 上篇博客我们简单说过异常信息是存放在属性表集合中的Code属性表里,那么这篇博客就单独讲Code属性表中的exception_table. 在讲之前 ...
- Promise, Generator, async/await的渐进理解
作为前端开发者的伙伴们,肯定对Promise,Generator,async/await非常熟悉不过了.Promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单 ...
- python导出zabbix数据并发邮件脚本
Zabbix没有报表导出的功能,于是通过编写脚本导出zabbix数据并发邮件.效果如下: 下面是脚本,可根据自己的具体情况修改: #!/usr/bin/python #coding:utf-8 imp ...
- 一个Java程序猿眼中的前后端分离以及Vue.js入门
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...
- Shim 与 Polyfill
Shim: 用来向后兼容.比如 requestIdleCallback,为了在旧的环境中不报错,可以加 shim. 使用环境中现有的 api 来实现,不会引入额外的依赖或其他技术. Polyfill: ...
- .netcoreapp 发布到 linux 的问题,vs靠不住
.netcore 2.0 发布后,小版本更新速度惊人 截止目前:2.1.200 最新一个新项目,vs发布到linux@debian9一直报错,反复发布n次依然失败.把本地2.1.100更新到最新2.1 ...
- MySQL查看数据库安装路径
有时候在我们开发的过程中并不一定记得数据库的安装路径.比如要查看mysql 数据库的安装目录在哪里:我们可以通过mysql命令查看mysql的安装路径: # 以下两个sql任意一个可查询 select ...
- 入门rocketmq从浅到深
目录 一.引言 二.介绍 三.Rocketmq关键概念 1.主题与标签 2.发送与订阅群组 3.Broker与NameServer 4.广播消费与集群消费 5.消息队列 6.集群方式 7.顺序消息 8 ...
- Android使用google breakpad捕获分析native cash
Android 开发高手课 课后练习(1) 一.Chapter01 崩溃 https://time.geekbang.org/column/article/70602 https://github.c ...