【JavaEE】Day09-IO流&字符缓冲流

1.字节缓冲流(了解,一般不会用)

构造方法:

方法名说明
BufferedOutputStream(OutputStream out)创建字节缓冲输出流对象
BufferedInputStream(InputStream in)创建字节缓冲输入流对象
  • 示例代码

    public class BufferStreamDemo {
        public static void main(String[] args) throws IOException {
            //字节缓冲输出流:BufferedOutputStream(OutputStream out)
     
            BufferedOutputStream bos = new BufferedOutputStream(new 				                                       FileOutputStream("myByteStream\\bos.txt"));
            //写数据
            bos.write("hello\r\n".getBytes());
            bos.write("world\r\n".getBytes());
            //释放资源
            bos.close();
        
    
            //字节缓冲输入流:BufferedInputStream(InputStream in)
            BufferedInputStream bis = new BufferedInputStream(new                                                          FileInputStream("myByteStream\\bos.txt"));
    
            //一次读取一个字节数据
    //        int by;
    //        while ((by=bis.read())!=-1) {
    //            System.out.print((char)by);
    //        }
    
            //一次读取一个字节数组数据
            byte[] bys = new byte[1024];
            int len;
            while ((len=bis.read(bys))!=-1) {
                System.out.print(new String(bys,0,len));
            }
    
            //释放资源
            bis.close();
        }
    }
    
    
    
    

2.编码表

电脑只认识字节数据(二进制数据)
*ASCII:一个字节代表一个字符

*GBK:最常用的中文码表。一个中文使用俩个字节编码。
*UTF-8:一个中文使用三个字节。
*现在用的最多的是UTF-8

3.String的常用方法

String----> byte[] arr:编码的过程
	byte[] getByte();采用平台默认的编码;
	byte[] getByte (String 编码名称);
	
byte------> String :解码的过程;
	String(byte[] arr);------->将字节数组变成字符串,采用的是平台默认的码表;
	String(byte[] arr,String charsetName);------->通过指定的字符集解码指定的字节数组来创建字符串 

*编码和解码使用的码表必须是同一个否则会出现乱码现象
	如:编码使用GBK,解码就必须使用GBK。
	
	String ----> char[] :
						char[] toCharArray();
	char[] ----> String :
						String(char[] value)  --->可以通过String的构造将字符数组变成字符串

4. 字符流

4.1

Reader(抽象类)
Writer (抽象类)
字符流=字节流+编码表

	
		| 方法名                                              | 说明                                         |
		| --------------------------------------------------- | -------------------------------------------- |

字符输入流:| InputStreamReader(InputStream in) | 使用默认字符编码创建InputStreamReader对象 |
| InputStreamReader(InputStream in,String chatset) | 使用指定的字符编码创建InputStreamReader对象 |
字符输出流:| OutputStreamWriter(OutputStream out) | 使用默认字符编码创建OutputStreamWriter对象 |
| OutputStreamWriter(OutputStream out,String charset) | 使用指定的字符编码创建OutputStreamWriter对象 |

	close(); ----->清空缓冲区的数据到硬盘上并关闭资源。
			**注意:在close();后面不能再输入数据,否则会报错
	flush();------>清空缓冲区的数据到硬盘上
					flush();后面可以在输入数据

代码演示

public class ConversionStreamDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter osw = new OutputStreamWriter(new                                             FileOutputStream("myCharStream\\osw.txt"));
        OutputStreamWriter osw = new OutputStreamWriter(new                                              FileOutputStream("myCharStream\\osw.txt"),"GBK");
        osw.write("中国");
        osw.close();

        //InputStreamReader isr = new InputStreamReader(new 	                                         FileInputStream("myCharStream\\osw.txt"));
        InputStreamReader isr = new InputStreamReader(new                                                 FileInputStream("myCharStream\\osw.txt"),"GBK");
        //一次读取一个字符数据
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.print((char)ch);
        }
        isr.close();
    }
}	

 ##4.2 字符流读数据的2种方式【应用】

- 方法介绍

| 方法名                | 说明                   |
| --------------------- | ---------------------- |
| int read()            | 一次读一个字符数据     |
| int read(char[] cbuf) | 一次读一个字符数组数据 |

## 4.3 写方法的方式

方法介绍

| 方法名                                    | 说明                 |
| ----------------------------------------- | -------------------- |
| void   write(int c)                       | 写一个字符           |
| void   write(char[] cbuf)                 | 写入一个字符数组     |
| void write(char[] cbuf, int off, int len) | 写入字符数组的一部分 |
| void write(String str)                    | 写一个字符串         |
| void write(String str, int off, int len)  | 写一个字符串的一部分 |
**前三种方式不好用,基本用不到
**最后俩种用到最多






中文的字节存储方式

用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别是中文的呢?

汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数


### 5. 字符缓冲流:(重点)
  	BufferedReader(Reader r)
  	int read();// 一次读一个字符
  	int read(char[] arr); //一次读一个字符数组的数据
  	*String readLine(); //一次读一行, 不读取换行符号!!!!!!!!!!!!!!!!!!!!!!
  	close();
  BufferedWriter(Writer w)
  	write(int ch); //一次写一个字符
  	write(char[] arr);//一次写一个字符数组
  	write(char[] arr,int start,int length); //一次写一个字符数组的一部分
  	write(String str); //直接写一个字符串
  	*write(String str,int start,int length); //直接写一个字符串
  	flush(); ---->将缓冲区中的数据刷新到硬盘上
  	*newLine() ----> 他可以根据操作系统,来写出一个换行符!!!!!!!!!!!!!!!!!!!!!!!!!!
  	*close(); ---->关闭资源,而且在关闭资源前检查缓冲区,如果有数据写到硬盘上


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值