JAVA基础IO的分类

本文介绍了JAVA中的IO流分类,包括按照数据流向分为输入流和输出流,以及按照数据类型分为字节流和字符流。字节流处理全球通用,而字符流用于方便处理字符数据。还讲解了转换流的概念,它是字节流与字符流之间的转换工具,通过编码表完成字节与字符的转化,防止乱码问题。最后,通过代码示例展示了字节流和字符流的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.job.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class IoDemo {


	public static void main(String[] args) throws IOException {
		/*
		 * IO的分类:
		 * 按照数据流向分:
		 * 	输入流:读入数据(一般从网络或磁盘把数据加载到内存)
		 * 	输出流:写出数据(就是把内存中处理到数据保存到磁盘或其他设备)
		 * 按照数据类型分:
		 * 	字节流(全球通用,任何时候使用字节流都可以,而且不会有编码问题)
		 * 		InputStream(用于读取字节流的抽象类,表示字节输入流的所有类到超类JDK1.0
		 * 		OutputStream
		 * 	字符流(字符流有不同的编码规范支持,各个编码表不能相互转换,所以有编码问题,要注意读写一致,否则乱码.)
		 * 	为什么还要用字符流?比如一个汉字,可能有几个字组成,如果只读取一个字节,就是问题,所以为了方便处理字符数据,骄傲java提供字符流处理
		 * 		Reader 用于读取字符流的抽象类.表示字符输入流到所有类的超类.JDK1.1
		 * 		Writer 
		 **/
		/*
		OutputStream os = new FileOutputStream("haha");
		InputStream is = new FileInputStream("haha");
		os.write("hello io stream".getBytes());
		os.write("i love you not because who you are,but because who i am when i an with you".getBytes());
		byte[] b =new byte[1024];
		int len=0;
		while((len = is.read(b))!=-1){
			System.out.print(new String(b,0,len));
		}
		System.out.println(new String(b));
		is.close();
		os.close();*/
		
		
		InputStream is = new FileInputStream("E:\\JavaJobs\\IOProject\\src\\com\\job\\io\\IoDemo.java");
		byte[] bys = new byte[1646];
		int len;
		while ((len = is.read(bys)) != -1) {
			System.out.print(new String(bys));
		}
		is.close();
	}
}
package com.job.io;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class SwitchStreamDemo {
	public static void main(String[] args) throws UnsupportedEncodingException {
		/*
		 * 转换流:
		 * 	什么是转换流?
		 * 		因为字节流处理字符数据不是很方便(因为赌气大于一个字节字节的数据时可能读取不全),这时候为了解决这个问题
		 * 		java提供了转换流,转换流就是用编码表把字节流转换字符流,或者用编码表把字符流转换为字节流。
		 * 	字符流=字节流+编码表
		 * 	什么是编码表?
		 * 		字符==数值 (“a”=97,“A”=65,“0”=48),
		 * 		GBK编码表的数值:“刘伟”=[-63, -11, -50, -80],UTF-8编码表的数值:“刘伟”=[-27, -120, -104, -28, -68, -97]
		 * 		ASCII:美国标准信息交换码,用一个字节7bit表示,最高为是符号位.
		 * 		ISO8859-1:拉丁码表,欧洲码表,用一个字节8bit表示,不分正负
		 * 		中国(中文码表):
		 * 			GB2312:收录几千个汉字(ANSi,简体中文)
		 * 			GBK:GB2312扩容升级后,融合了更多字符。
		 * 			GB18030:GBK取代版本 ,56个名族的也加上
		 * 			BIG-5:大五码,台湾香港地区的繁体解决方案
		 * 		国际标准 (中文码表):
		 * 			为什么制定国际标准,为了实现国际化(我写了一个软件,能根据不同的地区,显示不同的语言)
		 * 			unicode(universal 通用的,全球的):融合多种文字,所有文字都用两个字节表示,java的默认使用语言就是unicode
		 * 			UTF-8:自多用3个字节表示一个字符,Unicode经过优化成为UTF-8(按需分配,避免浪费)
		 * 	总结:
		 * 		只要读写码一致,就不会有乱码问题。 
		 * 
		 * */
		byte[] b="刘伟".getBytes();
		byte[] b1="刘伟".getBytes("GBK");
		byte[] b2="刘伟".getBytes("UTF-8"); //编码
		System.out.println(Arrays.toString(b));
		System.out.println(Arrays.toString(b1));
		System.out.println(Arrays.toString(b2));
		System.out.println(new String(b,"unicode"));//解码
		System.out.println(new String(b2));
		System.out.println(new String(b1));
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值