io流的分类及举例

本文探讨了字符流与字节流在Java中的差异,字符流以Unicode编码处理字符,适合文本数据传输,而字节流处理原始的8位字节数据,适用于图片等二进制文件复制。通过示例展示了如何使用字节流从键盘读取数据并写入文件。此外,还解释了字符与字节的关系,ASCII和Unicode编码的区别,以及标准输入输出流的概念。
摘要由CSDN通过智能技术生成

在这里插入图片描述
字符流就是以ascll码来进行读取,而字节流8个bit读取
字符流
在这里插入图片描述
read带参数的方法
在这里插入图片描述

字节流
在这里插入图片描述

FileInputSteam 字节输出流的实现类

只支持参数为byte的write方法
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

字节流可以复制图片等的二进制文件,但是字符流不可以

标准输入输出流

在这里插入图片描述

读取文件到标准输出流
getbytes将字符串转成字节流
在这里插入图片描述

OutputStreamWriter

在这里插入图片描述

是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。

对输出流的转换
在这里插入图片描述

这里可以用字符缓冲流
在这里插入图片描述
对输入流的转换

在这里插入图片描述

对于这System中的out

在这里插入图片描述

键盘写入文件

public class IOL {
public static void main(String [] args) throws IOException {
	mothe();
	
}

private static void mothe() throws IOException {
	//创建字节输入流对象
	InputStream is=System.in ;
	//创建输出流对象,写入字符文件
	FileWriter fw =new FileWriter("D:\\java文件\\a.txt");
	//读写数据
	byte[] bys=new byte[1024];
	int len;
	while((len=is.read(bys))!=-1) {
		//for(int i=0;i<1025;i++)
			//System.out.print(bys[i]);
		fw.write(new String(bys,0,len-1));//将一个比特转为一个字符串,如1的ascll码为49,转为字符1
		fw.flush();
	}
	fw.close();
	is.close();
}
}

在这里插入图片描述

关于字符

字符是指计算机中使用的字母、数字、字和符号。
1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节。
ASCII是一个字节,Unicode是两个字节。
Java的字符是Unicode的,所以是两个字节。

1)、英文和数字占一个字节

(2)、中文占一个字符,也就是两个字节

(3)、字符 不等于 字节。
字符(char)是 Java 中的一种基本数据类型,由 2 个字节组成,范围从 0 开始,到 2^16-1。
字节是一种数据量的单位,一个字节等于 8 位。所有的数据所占空间都可以用字节数来衡量。例如一个字符占 2 个字节,一个 int 占 4 个字节,一个 double 占 8 个字节 等等。

1字符=2字节;

utf-8占几个字节

占2个字节的:〇

占3个字节的:基本等同于GBK,含21000多个汉字

占4个字节的:中日韩超大字符集里面的汉字,有5万多个

一个utf8数字占1个字节

一个utf8英文字母占1个字节

在查找 UTF-8 编码资料时发现,很多的帖子说的 UTF-8 编码里,一个汉字占用3个字节,有的还做了个证明,大概是这样的,创建一个没有BOM的UTF-8编码的文本文件,里面保存了几个汉字,然后查看文件的大小。我觉得这样的证明没有一点说服力,因为 UTF-8 是变长的,1-6个字节,少量的汉字检测是不能说明所有的汉字都是的。

后来我又查看了字符映射表-汉语,找到了正确的答案,少数是汉字每个占用3个字节,多数占用4个字节。

占用3个字节的范围

合计:52156个

占用4个字节的范围

合计:64029个

关于InputStream in

抽象类不可以实例化,但是抽象类也是一个类。
面相对象的特性之一就是多态。
一个对象的引用类型可以是自身类,也可以是父类(包括抽象类),接口。
比如F22这个类实现了AirCraft这个抽象类,又实现了Movable这个接口。
就可以以下引用类型:
F22 f22 = new F22();
AirCraft f22 = new F22();
Movable f22 = new F22();
Object f22 = new F22();
我上面已经回答了。抽象类不可以实例化,但是继承并实现了这个抽象类的子类可以实例化。
假设有一个方法“getStandardInputStream”会返回一个InputStream的对象作为标准输入流。
InputStream in = getStandardInputStream();
System.in = in;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值