IO字节流概述以及如何使用

IO字节流

I : 是Input(输入) 的缩写
O: 是Output(输出)的缩写

既然提到了输入输出,那么这个一来一回的过程是针对哪个对象来说的呢?
这个问题非常重要!这里先不作赘述

每个文件都是由字节组成的,无论这个文件是什么格式。
但我们需要对文件进行复制粘贴,传输时用的就是这个字节流进行操作的。

输出:内存 -->硬盘

输出流在java 有一个OutputStream超类(Abstract) 这个类是所有输出流的父类
它含有的方法有
在这里插入图片描述
close() 方法就是在使用完这个写入操作时,需要关闭这个IO连接,释放系统资源
flush():强制把java的缓存写出
write(byte[] b):把字节数组中的 数据写出
write(byte[]] b ,int off , int len): 把字节数组中的 数据按照off 的后一个位置开始写len个字节)

继承它的子类有

写入数据到文件思路:

  • 1、 创建一个FIleOutPutSream (文件输出流),构造方法中传入写入数据的地址
    常用的方法:
    FileOutputStream​(File file)
    FileOutputStream​(String name)
    2、指定输出流的到达的文件地址
    3、关闭输出流

原理:
java程序 -> JVM -->OS -->OS调用写数据的方法–>把数据写入到文件中

一次写入一个字节代码:

public static void main(String[] args){
	File file = new File("c:\\abc.txt");//这个文件不存在的
	FileOutputStreamout = new FileOutputStream(file);//在构造方法种,会自动帮我们创建abc.txt文件,然后流对象指向这个txt文件
	out.write(65); //写入数据的时候会把65(十进制)转换为二进制的数。1个字节8个比特位
	out.close();
}

面试题:
如果往txt文件中写入 100 需要几个字节?(见末尾answer)

一次写入多个字节

注意:
写入的第一个字节是 0-127 则查询ascll码表
写入的第一个字节是负数的话,则第一个和第二个字节合并为一个表示中文,查询系统默认码表(GBK)

思路和原理同一次写入一个字节相同

一次写入多个字节代码:

public static void main(String[] args){
	File file = new File("c:\\abc.txt");//这个文件不存在的
	FileOutputStreamout = new FileOutputStream(file);//在构造方法种,会自动帮我们创建abc.txt文件,然后流对象指向这个txt文件
	byte[] b = new byte[65,66,67,68];
	out.write(b); //写入数据的时候会把65(十进制)转换为二进制的数。1个字节8个比特位
	out.close();
}

在一个文件追加写入数据
使用里外一个FileOutPutStream构造方法 , append为true即可触发追加模式
FileOutputStream​(File file, boolean append)

public static void main(String[] args){
	File file = new File("c:\\abc.txt");//这个文件不存在的
	FileOutputStreamout = new FileOutputStream(file,true);//在构造方法种,追加模式
	
	out.write("你好".getByte()); //对字符串调用getByte方法,将字符串转变为字节码
	out.write("\r\n".getByte()); //手动换行
	out.close();
}

输入:硬盘 -->内存

OutPutStream 和InPutStream 使用方法 差不多
这里就不再赘述

直接上一个两者综合应用

模仿 复制粘贴文件
核心就是 把要复制的文件 转成InPut流文件,然后通过OutPut流方法,输出到目标文件地址即可
代码:

FileOutPutStream fout  = new FileOutPutStream("C:\\abc.txt");
FileInPutStream fin  = new FileInPutStream ("D:\\abc.txt");
int num = 1024
int len = 0;//每次读取的有效字节个数
byte[] b = new byte[num]; //创建一个数组用作缓存 一次读取1024个字节	
//用read方法从输入流中读出自定义byte数组的最大长度的字节数,然后放置到byte数组中,当len=-1时则为文件末尾
while((len= fis.raead(byte)!=-1){
//输出流中写回到文件
	fout.write(byte,0,len);
}
fout.close();
fis.close();

以上就是字节流的内容,字节流遇到博大精深的中华文字会不会出现问题呢?

当然会拉!对于不同的编码,GBK(2个) UTF-8(3个)的中文所占用的字节也是不同的。

所以这时候就得靠 java 字符流处理了

answer:三个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值