• IO流简要总结


    IO流小总结


    IO流的本质就是用于数据的传输,根据流的方向的不同,有输入流、输出流。根据数据类型的不同,又有字节流、字符流。

    字节流

          字节输入流   InputStream

          字节输出流   OutputStream

    字节流:主要用来处理字节或二进制对象。例如:视频、音频、图片等。

    字符流:主要用来处理字符、字符数组或者字符串文件。例如html、css、txt等

    字节流又称万能流,能处理任何文件,但是在处理字符方面不太擅长,于是就有了字符流。

    常用的基本方法

    void close()  关闭此输出流并且释放所有与此流有关的系统资源

    void flush()  刷新此输出流并强制写出所有缓冲的输出字节

    void write(byte[] b,int off,int len)  将指定的byte数组中的指定区域写入此输出流

    int read(byte [] b)     一次读取一个字节数组并返回一个读取的长度

    int read(byte [] b , int off ,int len) 读取一个字节数组的指定区域并返回读取个数

    文件的复制,其实质上就是利用流对文件的输入、输出。

    利用流的不同,可以有多中复制文件的方式,但是字符流,不能操作图片视频类的文件,否则会导致相应的文件,结构混乱,无法使用。

    缓冲流

    IO缓冲流比较基本的IO流,更有效率。普通的IO流,每次写入一个字节,就要读取一个字节,效率十分缓慢。若是频繁的读取写入,就会造成效率的低下。缓冲流,则是通过将字节读取出来,然后缓存到内存中去,等读取到一定数量就一起写入。这样就极大了提高了效率。使用缓存流最后必须要使用flush、close释放缓存、关闭IO流。

    追加写入

    方法:new FileOutputStream(s, true),FileOutputStream的构造方法中,有提供对应的选项。除此之外还有多种追加文本写入的方式。

    其他种类的IO流

    数据输入、输出流     DataInputStream(InputStream in)/ DataOuputStream(InputStream out)

    特点:基本数据类型流是字节流,具备字节流的功能,但是一般数据类型都是一个类的成员变量类的隐私数据。读取顺序必须和写入顺序、类型一致,写入到文件中的数据是不可见的,就是乱码过的

    PrintWriter

    向文本输出流打印对象的格式化表示形式。此类实现在PrintStream中的所有Print方法

    特点:只能写数据,不能读数据,能够写入任意类型,如果启动了自动刷新,就能实现自动刷新可以不用调用flush(),而且还能够设定写入的编码格式。解决IO 流编码问题。

    System类中的静态变量:in、out

    “标准”输入流:static InputStream in

    “标准”输出流:static PrintStream out

    他们各自代表了系统标准的输入输出设备。默认输入设备是键盘、默认的输出设备是显示器(就是控制台)

    RandomAccessFile 随机访问文件(可以访问文件的任意位置,并且能在该位置进行读取写入操作)

    RandomAccessFile不是IO流,是属于Object的一个子类。

    包含了InputStream和OutputStream的功能。

    使用时,要设置好权限,即new RandomAccessFile(File file,String “RW”) RW:读写权限

    方法seek(Long l) 指定访问文件的开始位置

    方法getFilePointer() 返回文件当前指针的位置

    方法length() 获取文件的长度

    可以通过RandomAccessFile() 每次都在文件末尾进行写入操作,从而完成实时追加写入。

    也可以利用每次读取一段,然后写入到其他文件保存的方式来对文件进行分割,再利用合并流,进行重组。

    合并流,该流与打印流Print想反,只有读取功能,没有写入功能的流。

    SequenceInputStream(FileInputStream fileInputStream1, FileInputStream fileInputStream2)

    构造方法,就是放两个输入流进去,然后读取,并使用其他输出流进行写入,就能实现对文件的合并操作。

    序列化流和反序列化流 ObjectInputStream/ObjectOutputStream

    序列化流:将对象写入到文件当中去

    反序列化流:将对象从文件中还原出去

    每次序列化对象,系统都会自动生成一个序列化ID,当反序列化对象的时候,系统就会校对,对象与文件内容的序列化ID。若是对应不上,就会报错。而对类成员的权限,类型等操作就会改变序列化ID。但是为了操作方便,一般都会自定义序列化ID。

    当然如果不希望类成员数据被序列化,可以加上关键字transient封装好数据,这被标记的成员变量就不会被序列化。

    序列化后的格式,参考toString()方法。

    内存流:存在于内存中,会随着程序的结束,内存也会自动回收。就是一个临时存放数据的流。

    字节内存流 ByteArrayInputStream/ByteArrayOutputStream

    字符数组内存流CharArrayReader/CharArrayWriter

    字符串内存流 StringReader/StringWriter

    Properties类:表示一个持久的属性集,可以保存在流中,或者从流中加载:属性列表中每个键及其对应值都是一个字符串。(一般用来,读写xx.properties的配置文件)。可以当做Map集合使用。

    setProperty(String key,String value)           Properties专属存储属性集的方法(推荐使用)

    put 或者putAll                                        Properties当做Map集合类使用时的存储属性集方法(不推荐,因为会把不是字符串的对象也存储进去)

    getProperties(String key)                              获得键对应的值。

    load(Reader reader)                                      获取所有属性集(键值对)列表

    store(OutputStream out , String comments)     将指定的内容写入到指定的文件中去

    clear()                                                                           清除所有装载的键值对。

  • 相关阅读:
    [轉]Flex实现代码分离mxml/as
    [轉]PHP执行MYSQL存储过程报错:Commands out of sync; you can't run this command now 问题的解决
    [轉]mysqli & pdo使用实例和详解
    JSON格式驗證以及格式說明
    [轉]can't return a result set in the given context及参数解释
    PHP ADODB資源
    [轉]Virtual PC 网络设置(Networking)
    [轉]20个非常有用的PHP类库
    [轉]MySQL存储过程 ERROR Handler 异常处理
    [轉]如何通过Jquery获取radio的值
  • 原文地址:https://www.cnblogs.com/xj619/p/10731783.html
Copyright © 2020-2023  润新知