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 ...
随机推荐
- BF-9000 BMC任务关键型应急通信系统
一.系统简介 BF-9000 BMC任务关键型应急通信系统,凝聚北峰通信近30年专网通信与应急通信研发的经验,并结合用户实际需求和应用场景所打造. 整体设计思路是采用骨干网.前指网.分队战斗网三层组网 ...
- windows粘贴板操作-自己的应用和windows右键互动
一.粘贴板操作函数 BOOL OpenClipboard(HWND hWnd);参数 hWnd 是打开剪贴板的窗口句柄,成功返回TRUE,失败返回FALSE BOOL CloseClipboard() ...
- Eclipse连接Hadoop集群及WordCount实践
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.环境准备 1.JDK安装与配置 2.Eclipse下载 下载解压即可,下载地址:https://pan.baidu.com/s/1i51UsVN ...
- C#删除字符串最后一个字符
例:字符串 string str="2,3,5,7,9," 去掉最后一个逗号 ","; 常用的方法: 1.SubString()方法 str=str.SubSt ...
- PHP 单例模式优点意义及如何实现
一.什么是单例模式? 1.含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2. ...
- Vue基本使用
Vue.js是一款流行的开源JavaScript前端框架,旨在更好地组织与简化Web开发.Vue所关注的核心是MVC模式中的视图层,同时,它也能方便地获取数据更新,并通过组件内部特定的方法实现视图与模 ...
- css公共库——清除浮动
清除浮动是css的基础,但有时候会忘了一些最简单的东西 浮动因为在文档流之外,所以会造成父元素的坍塌.父元素之后的元素排版就会乱. 常用的方法是在浮动父元素中添加cf类,然后定义cf样式,并将其放在公 ...
- 访问System x3650 IMM2的几种方式
一.通过web浏览器访问 1.打开浏览器,在地址栏上输入IMM2的IP地址访问,打开登录页面后,输入用户名和密码 登录 PS:第一次登录IMM2时,初始的用户名为USERID,密码为PASSW0RD( ...
- Windows Server 2012 R2 安装密钥(只适用安装,不支持激活)
标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB 数据中心版 = BH9T4-4N7CW-67J3M-64J36-WW98Y
- requirement failed: Unacceptable value for property 'kafka.timeline.metrics.host_in_memory_aggregation', boolean values must be either 'true' or 'false
requirement failed: Unacceptable value for property 'kafka.timeline.metrics.host_in_memory_aggregati ...