java基础io全部流详解(java–IO流☛☛字节缓冲流✪)
字节缓冲流
字节缓冲流介绍
BufferedOutputStream(OutputStream out):该类实现缓冲输出流.通过设置这样的输出流, 应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
BufferedInputStream(InputStream in):创建BufferedInputStream将创建一个内部缓冲区数组. 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
构造方法
方法名 说明 BufferedOutputStream(OutputStream out) 创建字节缓冲输出流对象【write】 BufferedInputStream(InputStream in) 创建字节缓冲输入流对象【read】字节缓冲流复制
package io_bytetheflow.IOliu; import java.io.*; public class bufferStreamCopyDemo { public static void main(String[] args) throws IOException { //复制视频 /* BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\java\\vd.avi")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\java1\\vd1.avi")); int by; while ((by=bis.read())!=-1) { bos.write(by); } System.out.println("复制成功!"); bos.close(); bis.close(); */ BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream("E:\\java1\\vd1.avi")); BufferedOutputStream bos1 = new BufferedOutputStream(new FileOutputStream("E:\\java\\vd11.avi")); byte[] bys = new byte[1024]; int len; while ((len=bis1.read(bys))!=-1) { bos1.write(bys,0,len); } System.out.println("复制成功!"); bos1.close(); bis1.close(); } }字符流
为什么会出现字符流
字符流的介绍
由于字节流操作中文不是特别的方便 ,所以Java就提供字符流
字符流 = 字节流 + 编码表
中文的字节存储方式
用字节流复制文本文件时 ,文本文件也会有中文 ,但是没有问题 ,原因是最终底层操作会自动进行字节拼接成中文
汉字在存储的时候 ,无论选择哪种编码存储 ,第一个字节都是负数
编码表
什么是字符集
是一个系统支持的所有字符的集合 ,包括各国家文字 、标点符号 、图形符号 、数字等
计算机要准确的存储和识别各种字符集符号 ,就需要进行字符编码 ,一套字符集必然至少有一套字符编码 。常见字符集有ASCII字符集 、GBXXX字符集 、Unicode字符集等
常见的字符集
ASCII字符集:
lASCII:是基于拉丁字母的一套电脑编码系统,用于显示现代英语 ,主要包括控制字符(回车键 、退格 、换行键等)和可显示字符(英文大小写字符 、阿拉伯数字和西文符号)
基本的ASCII字符集 ,使用7位表示一个字符,共128字符 。ASCII的扩展字符集使用8位表示一个字符 ,共256字符 ,方便支持欧洲常用字符 。是一个系统支持的所有字符的集合,包括各国家文字 、标点符号、图形符号 、数字等
GBXXX字符集:
GBK:最常用的中文码表 。是在GB2312标准基础上的扩展规范 ,使用了双字节编码方案 ,共收录了21003个汉字 ,完全兼容GB2312标准 ,同时支持繁体汉字以及日韩汉字等
Unicode字符集:
UTF-8编码:可以用来表示Unicode标准中任意字符 ,它是电子邮件 、网页及其他存储或传送文字的应用 中 ,优先采用的编码 。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码 。它使用一至四个字节为每个字符编码
编码规则:
128个US-ASCII字符 ,只需一个字节编码
拉丁文等字符 ,需要二个字节编码
大部分常用字(含中文) ,使用三个字节编码
其他极少使用的Unicode辅助字符,使用四字节编码
字符串中的编码解码问题
相关方法
方法名 说明 byte[] getBytes() 使用平台的默认字符集将该 String编码为一系列字节 byte[] getBytes(String charsetName) 使用指定的字符集将该 String编码为一系列字节 String(byte[] bytes) 使用平台的默认字符集解码指定的字节数组来创建字符串 String(byte[] bytes, String charsetName) 通过指定的字符集解码指定的字节数组来创建字符串 public class StringDemo { public static void main(String[] args) throws UnsupportedEncodingException { //定义一个字符串 String s = "中国"; //byte[] bys = s.getBytes(); //[-28, -72, -83, -27, -101, -67] //byte[] bys = s.getBytes("UTF-8"); //[-28, -72, -83, -27, -101, -67] byte[] bys = s.getBytes("GBK"); //[-42, -48, -71, -6] System.out.println(Arrays.toString(bys)); //String ss = new String(bys); //String ss = new String(bys,"UTF-8"); String ss = new String(bys,"GBK"); System.out.println(ss); } }创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!