zoukankan      html  css  js  c++  java
  • Java I/O 小结

    主要内容:

    一.输入流基类:InputStream 和 OutputStream(字节流)、 Reader 和 Writer(字符流)

    二.文件字节流:FileInputStream和FileOutputStream

    三.转换流(字节流-->字符流):InputStreamReader 和 OutputStreamWriter、FileReader 和 FileWriter

    四.缓冲流:BufferedInputStream、BufferedOutputStream 和 BufferedReader、BufferedWriter

    (以下内容等待更新……)

    五.数据流:DataInputStream 和 DataOutputStream

    六.标准输入输出流: System.in 和 System.out

    七.对象流:ObjectInputStream和OjbectOutputSteam

    一.输入流基类:InputStream 和 OutputStream(字节流)、 Reader 和 Writer(字符流)

    在Java中,所有的I/O类都来源于这四个抽象类,其中InputStream 和 OutputStream为字节流输入输出(二进制I/O),Reader和Writer为字符流输入输出(文本I/O)。

    二.文件字节流:FileInputStream和FileOutputStream

    可知,文件中的内容由最基本的字节组成。如果我们要获取里面的内容,首先就要以字节的形式去获取:

    三.转换流(字节流-->字符流):InputStreamReader 和 OutputStreamWriter、FileReader 和 FileWriter

    首先要明白两个概念,编码与编码格式:

    1.Unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格。

    2.GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储Unicode编码的数据的,但是分别是2种不同的格式。

    3.在内存中,即在Java虚拟机上,字符是有“编码”而没有“编码格式”的,其“编码”为Unicode。相反,在磁盘,即文件上,字符是没有“编码”但有“编码格式”的,为“UTF-8”或“GBK”等。

    (以上内容来自:java中的编码和编码格式问题

    所以,磁盘中的内容是经过了“UTF-8”或“GBK”的编码的,为了从磁盘中读取这些内容:

    1)先利用FileInputStream读出字节流,

    2)然后再根据编码格式利用InputStreamReader进行解码,最后得到Unicode。

    这样Java就能够识别是哪个字符了(123.txt的编码格式是utf-8)。

    对于FileReader 和 FileWriter,他们是InputStreamReader 和 OutputStreamWriter的封装,根据系统默认字符集进行解码,但这不一定文件的编码相匹配,具有一定的盲目性。

    四.缓冲流:BufferedInputStream、BufferedOutputStream 和 BufferedReader、BufferedWriter

    在频繁的读写文件时,缓冲流能提高效率:

     

  • 相关阅读:
    mac 终端命令
    安装和使用Carthage
    Mac下的常用终端命令与vim常用命令
    swift 获取推送deviceToken
    使mac版的MYSQL支持emoji表情
    iOS --- 通过CPU实现的简单滤镜效果
    IOS多选单选相册图片
    AVCaptureDevice iOS摄像头属性
    GPUImage 滤镜介绍
    苹果IOS开发者账号如何续费-Appstore
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/9662986.html
Copyright © 2011-2022 走看看