zoukankan      html  css  js  c++  java
  • IO

    字符编码表:计算机底层数据存储的都是二进制数据,把生活中的每一个字符和一个整数对应起来,就是编码表
      ASCLL:一个字节中的7位就可以表示,对应的字节都是整数,首位0代表符号;
      iso-8859-1:拉丁码表,用了一个字节表示,首位1表示符号,全是负数
      GB2312:简体中文码表,2万的中文和符号,用两个字节表示,首位是1,都是负数
      GBK:中文码表,两个字节,第一个字节开头是1,第二字节开头是0
      GB18030:最新的中文码表
      unicode:国际标准码表,都用两个字节进行存储
        java中的字符串是按照系统默认编码来解析的
        简体中文,字符串默认的码表是GBK
      UFT-8:基于unicode,一个字节可以存储的数据就用一个字节,在每一个字节前加入了编码信息。
        用三个字节存储的中文!
      能识别中文的码表:GBK, UTF-8;正因为每个码表不同意,所以有编码解码的问题
      编码:将我们看得懂的内容转成计算机存储内容
      解码:将计算机存储内容变为我们看得懂得内容

      每一次数据的操作都面临编码解码的问题:写数据——存数据,编码;看数据,解码
      读数据:数据本身编码,读取数据时所用的编码

    java.io.OutputStreamWriter 字符通往字节的桥梁
        继承自Writer 可以使用Writer的方法
          一个字符
          一个字符数组
          字符串
          (需要flush())
      构造方法
        OutputStreamWriter(OutputStream out) 默认操作系统 GBK
        OutputStreamWriter(OutputStream out, String charsetName)
          out:所有字节输出流的超类,可以传入其子类
          charsetName:按照指定的编码向输出流中写入数据

    java.io.InputStreamReader(InputStream in) 字节通往字符的桥梁
        继承Reader 可以使用read方法
          读一个字符
          读一个字符数组
      构造方法
        InputStreamReader(InputStream in)
        InputStreamReader(InputStream in, String charsetName)
          in:字节输入流(多态)
          charsetName:指定的编码表进行读取 不区分大小写

    java.io.ObjectOutputStream 序列化流 将对象写入到文件,继承自OutputStream
      方法
          void writeObject(Object obj)写对象的特有方法
      构造方法
          ObjectOutputStream(OutputStream out)
    java.io.ObjectInputStream 反序列化流 读取文件中的对象 继承自InputStream
      方法
          Object readObject() 读对象的方法
      构造方法
          ObjectInputStream(InputStream in)
    如果想实现序列化或者反序列化都需要实现Serializable接口
    这个接口没有任何方法,它是一个标记型接口
    静态内容不能被序列化 静态内容属于类 不属于对象(序列化是对象的序列化)

    transient 关键字 瞬态关键字 被其修饰的成员不能进行序列化
      每一个实现了Serializable的类都有一个序列化ID,序列化对象时ID也随对象封装到流中,如果此时改变类中的
      内容,ID就会改变,反序列化时对象中的ID与类中的ID不一致,报异常。(要想避免此异常,可以实现接口时自己定义其序列化ID)

    打印流
    java.io.PrintStream
    java.io.PrintWriter
      打印流的特点
        1:打印流只负责输出目的
        2:打印流为其他流添加了功能
        3:打印流不会抛出IO异常

    PrintStream 构造方法中可以接收 字符串路径 File对象 字节输出流对象
    PrintWriter 构造方法中可以接收 字符串路径 File对象 字节输出流对象 字符输出流对象

      常用方法
        void print(参数) 不换行打印 原样输出
        void println(int x) 换行打印 原样输出

    打印流可以自动刷新
        1:数据目的必须是流对象
        2:只有3个方法可以自动刷新 println printf format
            PrintWriter(OutputStream out, boolean autoFlush)
            boolean autoFlush 值为true则开启自动刷新

    java.io.Properties 双列集合
      特点:
         1:Hashtable的子类,可以使用Map集合的所有方法
         2:类已经确定了类型,没有泛型,K V 都是String
         3:唯一一个能够直接和IO流直接结合使用的集合

      特有方法
          Object setProperty(String key, String value) == put方法
          String getProperty(String key) == Map的get()方法
          Set<String> stringPropertyNames() 返回一个所有键的Set集合

      特有和IO结合的方法
          将输入流中的数据读取到集合中
            void load(InputStream inStream)
            void load(Reader reader)
          将集合中的数据写入到输出流中
            void store(OutputStream out, String comments)
            void store(Writer writer, String comments)
              comments:就是一个注释,不能写中文

      可以将文件的后缀名改为 .properties
      文件中的形式 key=value


    Commons_IO 一个辅助的jar包

    FileUtils
        static String readFileToString(File file):读取文件内容
        static void writeStringToFile(File file, String content):将content内容写入到文件中
        static void copyFile(File srcFile, File destFile):文件复制
        static void copyDirectoryToDirectory(File srcDir, File destDir):文件夹的复制


  • 相关阅读:
    面试题38:股票最大收益问题
    面试题37:字符串中的括号
    面试题36:罗马数和阿拉伯数的相互转换
    面试题35:大数(字符串)相乘
    面试题34:文本对齐
    面试题33:简化目录路径
    面试题32:字符串的通配符匹配
    并发调度的可串行性
    mysql limit查询(分页查询)探究
    通过宏定义将__declspec(dllexport)与__declspec(dllimport)的转化,实现库代码和使用代码使用同一份头文件
  • 原文地址:https://www.cnblogs.com/chonglchong/p/6660069.html
Copyright © 2011-2022 走看看