IO

1.什么时候使用输出流?什么时候使用输入流?
?输入和输出是站在内存(开发者)的角度而言的
A.硬盘–>内存:输入流
B.内存–>硬盘:输出流

?2.输入和输出的底层原理
将字符/字符串转成二进制进行存储,用记事本打开时,将8位的二进制(一个字节)转成字符,如果该字节对应的是(0,127),那么查找ASCII对应的码表,大于127的话查找系统对应的码表(GBK、UTF-8是不确定的)

3.一次性写多个字节?追加写?换行写

//写多个字节,就是将字符串转成字节数组
FileOutputStream fos=new FileOutputStream(String url);
fos.write(s.getBytes());//s是字符串类型
//追加写
FileOutputStream fos=new FileOutputStream(String url);
fos.write(s.getBytes(),true);//write的第二个参数是追加的含义
//换行写
FileOutputStream fos=new FileOutputStream(String url);
for(int i=0;i<3;i++)
{
	fos.write(s.getBytes(),true);
	fos.write("/r".getBytes());//windows、linux、mac是不一样的,所以要上网查询
}

4.一次读取多个字节

bytes arr[]=new bytes[1024];
FileInputStream fis=new FileInputStream();
int len=0;
//?1.fis.read()中传递的arr是可以接受字节的数量,设置成1024就是一次性可以读取1024个字节,下一次就会将数组中结果覆盖了,但可能不会覆盖1024个字节,这也就是为什么有2.关len的问题
//?2.返回的len是成功读取了多少个字节
//3.使用new String输出,由于len是成功读取了多少个字节,所以就输出len的长度;可以将new String 和 getBytes看成一对互逆的方法
while((len=fis.read(arr))!=-1)
	System.out.print(new String(arr,o,len));

5.为什么引入字符流?
在使用输入流进行读取数据时, 如果一次性就读取一个字节,再进行char(fis.read()),这个时候就会出错,因为GBK中的中文是2个字节,UTF-8中的中文是3个字节,仅截取一个字节的话会出现乱码,所以引入字符流,字符流就是不论什么编码方式,每次都读取一个字符出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值