IO 辅助概念

1.常见的字符编码
计算机中的所有信息组成都是二进制的数据,所有的能够描述出的中文文字都要经过处理的结果;
在计算机里,所有的语言文字都会使用编码来进行描述;例如:最常见的编码是ASCII
在实际开发中常用的编码:
GBK 、GB2312 中文的国际编码,其中GBK包含了简体中文和繁体中文;GB2312包含了简体中文;
ISO8859-1:是国际编码,可以描述任何的文字信息;
UNICODE:是十六进制编码;造成传输无用数据过多;
UTF编码(UTF-8):融合了ISO8859-1和UNICODE编码的特点;
在所有的开发中,使用的都是TUF-8编码;

2.产生乱码的原因
所谓乱码最本质的方式就是编码和解码的字符集不统一;

3.内存流
如果某个应用需要进行IO操作,但是不想产生文件的时候,就可以利用内存流实现输入输出的操作;
java 提供了两组操作;
字节内存流
ByteArrayInputStream
ByteArrayOutputStream
字符内存流
CharArrayReader
CharArrayWriter

ByteArrayInputStream(byte[] buf)
表示将要操作的数据设置到输入流
ByteArrayOutputStream()
从内存中输出数据;
以文件操作为例子
    输出(OutputStream):程序---》OutputStream---》文件;
    输入(InputStream):程序《---InputStream《--文件;
以内存操作为例子
     输出(InputStream):程序--》inputStream--》内存
     输入(OutputStream):程序《--OutputStream《---内存
实现一个小写字母转大写字母的操作;
为了方便的实现字母的转大写的转换(避免不必要的字符也被转换了),
可以借助Character char的包装类提供的方法
static char    toLowerCase(char ch){}
static int    toLowerCase(int codePoint){}
static char    toUpperCase(char ch){}
static int    toUpperCase(int codePoint)
会帮我们判断是字母还非字母;

String str="Hello World!!";//要求别转换的字符串
	//将所有的需要读取的数据放到内存输入流之中;
	InputStream bis=new ByteArrayInputStream(str.getBytes());
	//为了将所有的内存流数据取出可以使用ByteArrayOutputStream
	OutputStream bos=new ByteArrayOutputStream();
	int len;
	while((len=bis.read())!=-1) {
		bos.write(Character.toUpperCase(len));//字节输出流
	}
	System.out.println(bos);//调用toString()
	bis.close();
	bos.close();
	//向上转型的好处是可以得到操作模式上的统一;但是不可以忽略每个子类都有自己自己的功能;
	//在ByteArrayOutputStream中的重要方法
	//public byte[] toByteArray() 将所有保存在内存中的字节数据转换为字符数组

利用ByteArrayOutputStream可以实现多个文件同时读取;(实现文件的合并读取)

        File f1=new File("d:"+File.separator+"testio"+File.separator+"a.txt");
	File f2=new File("d:"+File.separator+"testio"+File.separator+"b.txt");
	FileInputStream fis1=new FileInputStream(f1);
	FileInputStream fis2=new FileInputStream(f2);
	ByteArrayOutputStream bos=new ByteArrayOutputStream();
	byte [] buf=new byte[1024];
	int len;
	while((len=fis1.read(buf))!=-1) {
		bos.write(buf, 0, len);
	}
	
	while((len=fis2.read(buf))!=-1) {
		bos.write(buf, 0, len);
	}
	
	byte[] byteArray = bos.toByteArray();
	fis1.close();
	fis2.close();
	bos.close();
	System.out.println(new String(byteArray));

猜你喜欢

转载自blog.csdn.net/qq_29393273/article/details/84888269