【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer

简介: 上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下。 在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流)。

       上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下。


       在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流)。


79.jpg


        这里我们分别来说一下这四个抽象类。


        细心的你也许会发现,大部分输入流和输出流都是成对的,有输入就有输出,一一对应。


        InputStream


        输入字节流InputStream的作用是标志那些从不同数据起源产生输入的类。

        基本方法有:


                int read()方法:读取一个字节,以整数的形式返回(0~255),如果返回-1,则已经到了输入流的末尾;


                int read(byte[ ] b)方法:读取一系列字节并存储到一个数组b中,返回实际读取的字节数,如果读取前已经到了输入流的末尾,则返回-1;


                int read(byte[ ] b,int off,int len)方法:读取至多len个字节并存储到一个字节数组b中,返回实际读取的字节数,如果读取前已经到了输入流的末尾,则返回-1;


                void close()方法:关闭此输入流并释放与该流有关的系统资源。


                long skip(long n)方法:跳过n个字节不读,直接跳到n个字节之后,返回实际跳过的字节数。


        需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。





       OutputStream


       输出字节流OutputStream接受输出字节并将这些字节发送到某个接收器。


       基本方法有:


                void write(int b)方法:将指定的字节写入此输出流。


                void write(byte[ ] b)方法:将b.length个字节从指定的byte数组写入此输出流。


                void write(byte[ ] b,int off,int len)方法:将指定byte数组中从偏移量off开始的len个字节写入此输出流。


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


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



       需要定义OutputStream 子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。


       Reader


      输入字符流Reader定义了以字符为单位读取数据的方法。


      基本方法有:


                int read()方法:读取一个字符并以整数的形式返回(0~255),如果已经到了输入流的末尾,则返回-1.


                int read(char[ ] cbuf)方法:读取一系列字符并存储到一个数组b中,返回实际读取的字符数,如果读取前已经到了输入流的末尾,则返回-1;


                int read(char[ ] cbuf,int off,int len)方法:读取至多len个字符并存储到一个数组cbuf中,返回实际读取的字节数,如果读取前已经到了输入流的末尾,则返回-1;



                void close()方法:关闭此输入流并释放与该流有关的系统资源。


                long skip(long n)方法:跳过n个字符不读,直接跳到n个字节之后,返回实际跳过的字符数。


      子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。



       Writer


      输出字符流Reader定义了以字符为单位写数据的方法。


      基本方法有:



                void write(int c)方法:向输出流中写入一个字符c。


                void write(char[ ] cbuf)方法:向输出流中写入字符数组cbuf。


                void write(String str)方法:向输出流中写入字符串str。


                void write(char[ ] cbuf,int off,int len)方法:将指定字符串数组cbuf中从偏移量off开始的len个字符写入此输出流。


                void write(String str,int off,int len)方法:将指定字符串str中从偏移量off开始的len个字符写入此输出流。


      子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。


       虽然这四个抽象类都定义了相应的方法,但在进行数据的读写时,真正用到的都是其子类,子类通常会重新定义相关方法。后面实践时再举例说明一些基本、常用的类。



相关文章
|
6月前
|
Java 数据处理 开发者
Java IO流专家级教程:深入理解InputStream/OutputStream和Reader/Writer的内部机制
【6月更文挑战第26天】Java IO流涉及字节流(InputStream/OutputStream)和字符流(Reader/Writer),用于高效处理数据输入输出。InputStream/OutputStream处理二进制数据,常使用缓冲提升性能;Reader/Writer处理文本,关注字符编码转换。两者都有阻塞IO操作,但Java NIO支持非阻塞。示例代码展示了如何使用FileInputStream/FileOutputStream和FileReader/FileWriter读写文件。理解这些流的内部机制有助于优化代码性能。
130 0
|
6月前
|
Java 开发者
Java IO流实战技巧:如何优化InputStream/OutputStream和Reader/Writer的使用?
【6月更文挑战第26天】Java IO流优化涉及缓冲、资源管理、字符编码和流式处理。使用Buffered流提高读写效率,如`BufferedInputStream`和`BufferedReader`。确保资源关闭使用try-with-resources,如`try (InputStream is = ...) {...}`。处理文本时指定编码,如`InputStreamReader(is, StandardCharsets.UTF_8)`防止乱码。流式处理大文件,分块读写避免内存溢出,以减少内存占用。这些技巧能提升程序性能和健壮性。
269 0
|
6月前
|
自然语言处理 Java
Java IO流进阶教程:掌握字节流和字符流的高级用法!
【6月更文挑战第26天】Java IO流助你高效交换数据,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)的高级技巧。缓冲流(Buffered*)提升读写性能,对象流(Object*Stream)支持对象序列化。字符流的BufferedReader/BufferedWriter优化文本处理,注意字符集如UTF-8用于编码转换。掌握这些,优化IO操作,提升代码质量。
57 0
|
6月前
|
Java
Java IO流终极指南:从InputStream/OutputStream到Reader/Writer的全面解读
【6月更文挑战第26天】Java IO流涵盖字节流(InputStream/OutputStream)和字符流(Reader/Writer),前者处理二进制数据,后者专司文本。例如,FileInputStream/FileOutputStream用于文件的字节级读写,而FileReader/FileWriter处理字符级文本。Buffered流提供缓冲功能,提升效率。选择合适的流类取决于数据类型和性能需求。
119 0
|
6月前
|
存储 设计模式 Java
Java IO流大揭秘:如何高效使用InputStream/OutputStream和Reader/Writer?
【6月更文挑战第26天】Java IO流核心基础,涉及InputStream/OutputStream(字节流)和Reader/Writer(字符流)。高效使用的关键包括:使用Buffered流提升性能,如BufferedInputStream和BufferedOutputStream;处理编码,通过InputStreamReader和OutputStreamWriter指定如UTF-8编码;应用装饰器模式,如DataOutputStream增强功能。理解并巧妙运用这些技巧能优化数据读写操作。
132 0
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
5月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
3月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
246 12
|
4月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
55 2
|
4月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。