io--流缓冲流,转换流,对象流

处理流之一:缓冲流的使用

 1.缓冲流:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter

 2.作用:

   提供流的读取、写入的速度
   提高读写速度的原因:内部提供了一个缓冲区

 3. 处理流,就是“套接”在已有的流的基础上。

 4.缓冲流的具体使用

 /*
    实现非文本文件的复制
     */
    @Test
    public void BufferedStreamTest()  {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;

        try {
            //1.造文件
            File srcFile = new File("爱情与友情.jpg");
            File destFile = new File("爱情与友情3.jpg");
            //2.造流
            //2.1 造节点流
            FileInputStream fis = new FileInputStream((srcFile));
            FileOutputStream fos = new FileOutputStream(destFile);
            //2.2 造缓冲流
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);

            //3.复制的细节:读取、写入
            byte[] buffer = new byte[10];
            int len;
            while((len = bis.read(buffer)) != -1){
                bos.write(buffer,0,len);

//                bos.flush();//刷新缓冲区

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.资源关闭
            //要求:先关闭外层的流,再关闭内层的流
            if(bos != null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            if(bis != null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            //说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略.
//        fos.close();
//        fis.close();
        }

    }

处理流之二:转换流的使用

 1.转换流:属于字符流
   InputStreamReader:将一个字节的输入流转换为字符的输入流
   OutputStreamWriter:将一个字符的输出流转换为字节的输出流

 2.作用:提供字节流与字符流之间的转换

 3. 解码:字节、字节数组  --->字符数组、字符串
    编码:字符数组、字符串 ---> 字节、字节数组


 4.字符集
ASCII:美国标准信息交换码。
   用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表
   用一个字节的8位表示。
GB2312:中国的中文编码表。最多两个字节编码所有字符
GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。
UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。

5.代码演示

 /*
    此时处理异常的话,仍然应该使用try-catch-finally
    InputStreamReader的使用,实现字节的输入流到字符的输入流的转换
     */
    @Test
    public void test1() throws IOException {

        FileInputStream fis = new FileInputStream("dbcp.txt");
//        InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集
        //参数2指明了字符集,具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集
        InputStreamReader isr = new InputStreamReader(fis,"UTF-8");//使用系统默认的字符集

        char[] cbuf = new char[20];
        int len;
        while((len = isr.read(cbuf)) != -1){
            String str = new String(cbuf,0,len);
            System.out.print(str);
        }

        isr.close();

    }

 对象流的使用

1.ObjectInputStream 和 ObjectOutputStream
2.作用:用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。

 3.要想一个java对象是可序列化的,需要满足相应的要求。

 Person(任意一个类)需要满足如下的要求,方可序列化
 1.需要实现接口:Serializable
 2.当前类提供一个全局常量:serialVersionUID
 3.除了当前Person类需要实现Serializable接口之外,还必须保证其内部所有属性
   也必须是可序列化的。(默认情况下,基本数据类型可序列化)
 补充:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量

 4.序列化机制:
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种
二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。
当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值