• 基础笔记10(IO 1.7try-with-resource) 装饰模式


    1.读写的类型分为字节流和字符流,字节流一般是视频音频其他所有的类型都可以。

    (非文档文件使用字符流易造成未知编码(?)错误)

    InputStream OutputStream 抽象类

    fileInputString FileOutputStream(file,true)//true追加还是覆盖

    字符流一般读取文档文件因为有字符编码

    Reader Writer 抽象类

    fileReader fileWrite(字符流其实就是继承了转换流(即指定了编码))

    2。处理流,字节缓冲流和字符缓冲流:必须在字节字符流(或者转换流)之上

    bufferedInputSteam bufferedOutputStream

    bufferedReader buffereWriter

    新增方法readLine() newLine()  可以读取一行数据。

    (他们的父类是过滤流,过滤流分别是字节流和字符流的子类)

    3.转换流,字节流转换字符流,重点是提供了自定义转换的编码

    inputStreamReader(字节流,‘编码’) outputStreamWriter(字节流,“编码”); 

    总结:上面的这三种流可组合使用:(2(3(1)));一般只是1,2组合使用。

    4.编码,解码(-->二进制,--->字符)

    4.1乱码的原因:

    IO流不要使用多态,即:子类赋值给父类,调用方法。

    一:编码解码字符集不一致。二:字节的长度不完整(数据缺失解析错误)

    byte[] b="指定编码".getBytes("utf-8");//byte[] b=“默认平台编码”.getBytes();
    
    new String("指定解码","gbk");//如果是new String("就是默认平台编码");

    其他流:

    5.节点流:字节数组流(从内存中读取和写入)和可以和缓存流一起使用。(感觉没有什么特别的用处,只是统一了数据传输都可以是流)

    ByteArrayInputStream:读取和字节流类似

    ByteArrayOutputStream :和字节流区别是,定义流时不要参数,写出的数据通过:byte[] b=流.toByteArray()得到。

    还有一个类似的字符数组流。

    6.处理流:数据流,可以传输基本类型和String类型的数据。

    DataInputStream readxxx()

    DataOutputStream writerxxx()

    注意:

    读写数据的类型必须一致。

    一般和缓冲流+字节流(或者和缓冲流+字节数组流)一起使用

    DateInputstream(bufferedinputStream(FileInputStream/ByteArrayInputStream)

    7.处理流:对象流(对象写到文件:序列化和从文件中读取对象反序列化)不仅可以传输基本还能传输对象。

    ObjectInputStream     readObject()

    ObjectOutputStream  writeObject()

    注意:

    对于需要序列化的对象必须实现serialization接口

    对于对象中不需要序列化的属性可以用关键字“tranisant”标识(同时反序列化得到对象,获取属性值为null)

    一般和缓冲流+字节流(或者和缓冲流+字节数组流)一起使用

    8.处理流:打印流(system.out)及键盘输入流(system.in)

    FileInputStream fdIn = new FileInputStream(FileDescriptor.in);//默认的system.in
    FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);默认的system.out
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
         Scanner scanner = new Scanner(System.in);//键盘输入(是对上面一种功能更加强大的对流封装)

    默认打印流是输出到控制台。输入流是键盘。可以修改成从文本中输入输出:

    PrintStream out = System.out;
    out=new PrintStream(new BufferedOutputStream(new FileOutputStream("f:/test/out.txt")),true);//true自动刷新
    InputStream in = System.in;
    in=new BufferedInputStream(new FileInputStream("f:/test/in.txt"));

    如果想改回去,将上面默认的流做参数传入即可。

    打印流除了PrintStream还有字符打印流PrintWriter,可对字符流的处理。

    9.java1.7try新特性:try-with-resource(详情)

    try (FileInputStream in = new FileInputStream("d:/in.txt")) {
                // do something
            } catch(Exception e) {
                System.out.println("message:"+e.getMessage());
                throw new RuntimeException("try块中产生了异常",e);
            }

    try()中的类型必须实现AutoCloseable接口(jdk1.7开始引入了此接口,作为Closeable接口的父接口)

    等价于:

     try {
                InputStream in = null;
                try {
                    in = new FileInputStream("d:/in.txt");
                    // do something
                    in.close();
                } catch (IOException e) {
                    if (in != null)
                        try {
                            in.close();
                        } catch (IOException ee) {
                            if (e != ee)
                                e.addSuppressed(ee);
                        }
                    throw e;
                }
            } catch (IOException e) {
                System.out.println(e.getMessage());
                throw new RuntimeException("try块中产生了异常", e);
            }

    10.装饰模式:一个类包装另一个类增强其功能,比如一些处理流就是包装一些节点流。

    11.拷贝文件:父目录文件夹不能拷贝到子目录文件夹中

    12.RandomAccessFile :文件随机读写流。(可以用于文件的分割)详情(12

    randomAccessFile(fiel,"r/rw");//是读取(r)还是写入流(rw)

    seek(index);设置读取或者写入的位置。

    文件合并追加到另一个流文件中即可。

    13.sequenceInputSream:合并输入流,将多个流合并成一个流操作。可可以用于合并文件

    sequenceInputStream(inputStream ,inputStream);

    sequenceInputStream(Enumaton<input> );//多个流枚举参数。

    vector<inputstream>.element();返回枚举

    总结:

    注要分为节点和处理:

    1.节点流:直接关联数据源和程序比如:

    字节流,字节数组流,

    字符流,字符数组流

    随机访问流

    2.处理流:具有一些特定功能增强:

    缓冲流(包括字节缓冲,字符缓冲,输入输出流)

    转换流(只有输入输出字节转换为字符)

    打印流(只有一个打印流)

    数据流(输入输出流)

    对象流(输入输出流)

    合并输入流(只有输入流)

  • 相关阅读:
    C#获取htmltry
    分页存储过程的写法 可以被调用
    验证邮箱地址是否正确的方法
    WinForm 异步调用方法
    C#基础复习第一部
    PowerDesigner12.5 下载、汉化及破解
    C# Timer用法及实例详解
    ADO.NET复习笔记
    C# 使用委托实现多线程调用窗体
    C#中存储过程的调用
  • 原文地址:https://www.cnblogs.com/straybirds/p/6209667.html
Copyright © 2020-2023  润新知