• Java精选笔记_其他IO流(ObjectInputStream、DataInputStream、PrintStream、标准输入输出流)


    其他IO流

    ObjectInputStream和ObjectOutputStream

    如果希望永久将对象转为字节数据写入到硬盘上,即对象序列化,可以使用ObjectOutputStream(对象输出流)来实现。

    当对象进行序列化时,必须保证该对象实现Serializable接口,否则程序会出现NotSerializableException异常

    Person对象被序列化后会生成二进制数据保存在“objectStream.txt”文件中,通过这些二进制数据可以恢复序列化之前的Java对象,此过程称为反序列化,JDK提供了ObjectInputStream类(对象输入流)可以实现对象的反序列化


    DataInputStream和DataOutputStream

    是两个与平台无关的数据操作流。

    它们不仅提供读写各种基本类型数据的方法,而且还提供了readUTF()和writeUTF()方法

    数据输入流DataInputStream

    允许应用程序从基础输入流中读取基本Java数据类型,如byte、int、float、boolean等

    构造方法

        DataInputStream(InputStream in) 使用指定的InputStream输入流创建一个DataInputStream对象

    方法

        public final int read(byte[] b)       从输入流中读取字节数据,并存储到字节数组b中

        public final int read(byte[] b,int off,int len) 从输入流中将从偏移量off开始的len个字节读入一个字节数组中

        public final boolean readBoolean() 读取一个输入字节,若该字节不是零,则返回true,若是零,则返回false

        public final byte readByte()         该方法用于读取一个输入字节

        public final char readChar()        该方法用于读取一个输入的char类型值并返回

        public final double readDouble() 该方法用于读取8个输入字节,同时返回一个double值

        public final float readFloat()         该方法用于读取4个输入字节,同时返回一个float值

        public final int readInt()                该方法用于读取4个输入字节,同时返回一个int值

        public final long readLong()         该方法用于读取8个输入字节,同时返回一个long值

        public final short readShort()       该方法用于读取2个输入字节,同时返回一个short值


    数据输出流DataOutputStream

    允许应用程序以适当方式将基本Java数据类型写入输出流中,如byte、int、float、boolean等类型。然后,应用程序可以使用数据输入流将数据读入。

    构造方法

        DataOutputStream(OutputStream out) 创建一个新的数据输出流,将数据写入指定基础输出流

    方法

        writeBoolean()        写入boolean类型数据

        writeByte()              写入byte类型数据

        writeChar()             写入char类型数据

        writeDouble()         写入double类型数据

        writeFloat()             写入float类型数据

        writeInt()                 写入int类型数据

    PrintStream字节打印流

    该流提供了一系列用于打印数据的print()和println()方法,可以将各种数据类型的数据都原样打印出来,即将基本数据类型的数据或引用数据类型的对象格式化成字符串后再输出。

    PrintStream字节打印流

    构造函数可以接受的参数类型

     1.file对象 File

     2.字符串路径 String

     3.字节输出流 OutputStream

    方法

        print(boolean b)      输出boolean类型数据

        print(char c)            输出char类型数据

        print(char[] s)          输出char数组类型数据

        print(double d)        输出double类型数据

        print(float f)             输出float类型数据

        print(int i)                输出int类型数据

        print(long l)             输出long类型数据

        print(String s)         输出String类型数据


    PrintWriter字符打印流

    用于将字符数据进行格式化的输出

    方法

        print(boolean b) 输出boolean类型数据

        print(char c) 输出char类型数据

        print(char[] s) 输出char数组类型数据

        print(double d) 输出double类型数据

        print(float f) 输出float类型数据

        print(int i) 输出int类型数据

        print(long l) 输出long类型数据

        print(String s) 输出String类型数据

    练习:控制台输入后,打印在控制台

        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
        PrintWriter Out=new PrintWriter(System.in,true));
        String line=true;
        while((line=bufr.readLine())!=numm) {
            if("over".equals(line))
            break;
            out.println(line);
        }
        out.close();
        bufr.close();

    标准输入输出流

    在System类中定义了三个常量:in、out和err,它们被习惯性地称为标准输入输出流。

        in为InputStream类型,它是标准输入流,默认情况下用于读取键盘输入的数据。

        out为PrintStream类型,它是标准输出流,默认将数据输出到命令行窗口。

        err也是PrintStream类型,它是标准错误流,它和out一样也是将数据输出到控制台,它输出的是应用程序运行时的错误信息。


    PipedInputStream和ByteArrayOutputStream

    称作管道流,它是一种比较特殊的流,必须先建立连接才能进行彼此间通信

        PipedOutputStream用于向管道中写入数据

        PipedInputStream用于从管道中读取写入的数据


    ByteArrayInputStream和ByteArrayOutputStream

        ByteArrayInputStream是从缓冲区中读取数据

        ByteArrayOutputStream类会在创建对象时就创建一个byte型数组的缓冲区,当向数组中写数据时,该对象会把所有的数据先写入缓冲区,最后一次性写入文件



    CharArrayReader和CharArrayWriter

        CharArrayReader是从字符数组中读取数据

        CharArrayWriter是在内存中创建一个字符数组缓冲区


    SequenceInputStream合并流(序列流)

    对多个流进行合并

        vactor<FileInputStream> v=new vactor<FileInputStream>();

        v.add(new FileInputStream("1.txt"));

        v.add(new FileInputStream("2.txt"));

        v.add(new FileInputStream("2.txt"));

        Enumeration<FileInputStream> en=v.elements();

        SeaquenceInputStream  sis=new SeaquenceInputStream(en);

        FileOutputStream fos=new FileOutputStream("4.txt");

        byte[] buf=new byte[1024];

        int len=0;

        while((len=sis.read(buf))!=-1) {

            fos.write(buf,0,len);

        }

        fos.close();

        sis.close();

    SequenceInputStream类可以将几个输入流串联在一起,合并为一个输入流。当通过这个流来读取数据时,它会依次从所有被串联的输入流中读取数据,对程序来说,就好像是对同一个流进行操作。
  • 相关阅读:
    顺序栈的基本操作(C语言)
    简单加密-维吉尼亚
    单链表的反转
    单链表的排序
    SVN信息泄露漏洞
    SQLi-labs Page-2_Less-21---Less-28a
    dedecms 任意密码重置 验证凭证回传
    ThinkCMF缓存Getshell
    ThinkCMF X2.2.0多处SQL注入漏洞
    SQLi-LABS Page-4(Challenges)
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7582138.html
Copyright © 2020-2023  润新知