(转)
什么是流:
流是一个抽象的概念。当Java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。流的创建是为了更方便地处理数据的输入输出。
流分为字节流和字符流。字节流也称为原始数据,需要用户读入后进行相应的编码转换。而字符流的实现是基于自动转换的,读取数据时会把数据按照JVM的默认编码自动转换成字符。
字节流由InputStream和OutputStream处理,而字符流由Reader和Writer处理。Reader和Writer是Java后加入的处理类,出于让数据的处理更方便的目的。
字节流处理概述:
对于字节流处理的类都继承自InputStream和OutputStream这两个抽象类。
InputStream提供的最重要的方法是:
- read();
- read(byte[] b) ;
- read(byte[] b, int off, int len) ;
用于从输入流中读取字节。
OutputStream提供的最重要的方法是:
- write(int b);
- write(byte[] b);
- write(byte[] b, int off, int len)
用于将字节写入输出流。
字节流处理类概述:
字节流的处理类有很多,他们都继承自InputStream或者OutputStream抽象类。
输入流:
先谈谈输入流,输入流中跟数据源直接接触的类有:FileInputStream和ByteArrayInputStream,他们分别实现了从文件或者内存中的字节数组读入数据到输入流。
其他的输入流处理类都是装饰类(Decorator模式),下面对他们进行一下简单介绍:
BufferedInputStream: 提供了缓冲功能。
DataInputStream: 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
PipedInputStream: 允许以管道的方式来处理流。当连接到一个PipedOutputStream后,它会读取后者输出到管道的数据。
PushbackInputStream: 允许放回已经读取的数据。
SequenceInputStream: 能对多个inputstream进行顺序处理。
输出流:
基本上每个输入流类都有一个相应的输出流类,提供相应的输出流处理。
同样,跟数据目的地直接接触的类有:FileOutputStream和ByteArrayOutputStream,前者实现了把数据流写入文件的功能,后者实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()
和 toString()
获取数据。
下面对其它的装饰类做一下简单介绍:
BufferedOutputStream: 提供了缓冲功能的输出流,在写出完成之前要调用flush来保证数据的输出。
DataOutputStream: 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
PipedOutputStream: 允许以管道的方式来处理流。可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream
对象,并由其他线程从连接的 PipedInputStream
读取。
PrintStream: 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。我们经常用到的System.out或者System.err都是PrintStream。
字符流处理概述:
所有的字符流操作类都继承自Reader或者Writer这两个抽象类。
Reader提供的重要方法有:
- read(char[] cbuf);
- read(char[] cbuf, int off, int len);
- read(CharBuffer target);
他们提供了从流中读取数据到字符数组或者CharBuffer的功能。
Writer提供的重要方法有:
- write(char[] cbuf);
- write(char[] cbuf, int off, int len);
- write(int c);
- write(String str);
- write(String str, int off, int len);
他们提供了把字符、字符数组或者字符串写入流中的功能。
字符流处理类概述:
输入流:
跟数据源直接接触的类:
CharArrayReader: 从内存中的字符数组中读入数据,以对数据进行流式读取。
StringReader:从内存中的字符串读入数据,以对数据进行流式读取。
FileReader:从文件中读入数据。注意这里读入数据时会根据JVM的默认编码对数据进行内转换,而不能指定使用的编码。所以当文件使用的编码不是JVM默认编码时,不要使用这种方式。要正确地转码,使用InputStreamReader。
装饰类:
BufferedReader:提供缓冲功能,可以读取行:readLine();
LineNumberReader: 提供读取行的控制:getLineNumber()等方法。
InputStreamReader: 字节流通向字符流的桥梁:它使用指定的
读取字节并将其解码为字符。charset
输出流:
根数据目的相关的类:
CharArrayWriter:把内存中的字符数组写入输出流,输出流的缓冲区会自动增加大小。输出流的数据可以通过一些方法重新获取。
StringWriter: 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。
FileWriter:把数据写入文件。
装饰类:
BufferedWriter:提供缓冲功能。
OutputStreamWriter:字符流通向字节流的桥梁:可使用指定的
将要写入流中的字符编码成字节。charset
PrintWriter: 向文本输出流打印对象的格式化表示形式。
流处理中的其它方法:
mark和reset用于重复读取某段的数据,如下代码:
- is = new BufferedInputStream(new FileInputStream("res/input.data"));
- assertTrue(is.available() > 0);
- assertTrue(is.markSupported());
- // The read limit has no effect.
- is.mark(0);
- int first = is.read();
- int second = is.read();
- is.reset();
- int firstAgain = is.read();
- int secondAgain = is.read();
- assertEquals(first, firstAgain);
- assertEquals(second, secondAgain);
Writer或者OutputStream中的flush(): 刷新该流的缓冲,用于确保数据的输出。
close(): 关闭流并释放与之关联的所有系统资源。
相关推荐
例如,javaio.bmp和javaio2.bmp可能是两张展示IO框架图的图片,其中详细描绘了不同类之间的继承关系和使用场景,帮助开发者更好地理解和掌握Java IO系统。 总结一下,Java IO框架是Java平台不可或缺的一部分,它为...
二、t-io框架架构 t-io框架主要包括Acceptor、NioEventLoop、ChannelGroup、Socket包装类等组件,它们协同工作,实现了网络通信的核心功能: 1. Acceptor:负责监听端口,接收新进来的连接请求。 2. NioEventLoop...
基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip 基于java的开发源码-异步IO框架 Cindy.zip ...
基于java开发框架-24-IO框架.rar
本项目是一个基于Java语言开发的t-io高性能网络编程项目,包含...系统设计旨在提供一种简单、高效、易于使用的网络编程解决方案,通过t-io框架实现,帮助开发者轻松应对网络编程的挑战,让网络编程变得更加甜蜜和高效。
Apache Commons IO 是一个Java库,专门用于处理输入/输出流操作。版本2.6是该库的一个稳定版本,提供了大量的类和方法来简化常见的IO任务。这个库是Java开发人员在处理文件、流、过滤器、读写操作时的重要工具。在本...
在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...
Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...
一、T-io框架介绍 T-io,全称为Tiny-IO,是一款基于NIO(Non-blocking I/O)的网络通信框架。它提供了包括TCP、UDP、HTTP、WebSocket等多种协议的支持,特别适用于构建高并发、低延迟的网络服务。T-io的特点在于其...
在IT行业中,网络通信是不可或缺的一部分,而t-io作为一款高性能、轻量级的Java NIO框架,为开发者提供了强大的网络编程支持。为了确保t-io服务的稳定性和效率,进行有效的测试至关重要。本文将围绕“t-io测试工具....
T-io框架采用了AIO模型,该模型在处理大量并发连接时表现出色,因为它允许操作系统在数据准备好时通知应用程序,而不是让应用程序等待数据。这大大提高了系统资源的利用率和整体性能。此外,T-io还提供了一套完整的...
Java的IO框架提供了处理输入和输出的强大工具,包括文件读写、流操作、字符编码等。在这个项目中,我们可能会用到`java.io`包下的类,如`File`, `FileReader`, `FileWriter`, `BufferedReader`, `BufferedWriter`等...
《Apache Commons IO 2.4在Java开发中的应用详解》 Apache Commons IO是Apache软件基金会提供的一个Java库,专门处理输入/输出(IO)操作。其中,`commons-io-2.4.jar`是该库的一个特定版本,适用于Eclipse和...
3. **commons-io-2.4-sources.jar**:包含了Apache Commons IO库的源代码,开发者可以查看源码,深入理解其内部实现机制,方便进行二次开发或调试。 4. **commons-io-2.4-test-sources.jar**:同上,这个文件提供了...
`t-io`是一个高性能、易用的Java NIO框架,而`tio-websocket`是其专门针对WebSocket协议的扩展,为开发者提供了在Java环境中构建WebSocket服务的强大工具。 首先,我们需要理解WebSocket是什么。WebSocket是一种在...
2. **自动管理的线程池**:t-io框架内置了智能线程池,能够根据连接数量动态调整工作线程,确保系统资源的合理分配,避免了过多线程导致的内存消耗和上下文切换开销。 3. **高度可扩展的事件驱动机制**:t-io采用...
在实际开发中,Apache Commons IO 通常与其他流行的开源库结合使用,如Spring框架、Hibernate ORM等,以提供全面的解决方案。其丰富的功能和良好的社区支持,使得Apache Commons IO 成为了Java开发者不可或缺的工具...
总的来说,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 在Java Web开发中是处理文件上传不可或缺的工具,它们为开发者提供了强大的支持,使得文件上传功能的实现变得既高效又安全。在开发过程中,正确...
在实际应用中,开发者通常会结合Servlet或Spring MVC等框架,利用FileUpload和IO库提供的API来构建文件上传功能。例如,使用`DiskFileItemFactory`配置临时存储路径,创建`ServletFileUpload`实例来解析请求,再通过...
Struts2是一个流行的Java web开发框架,它提供了一种优雅的方式来构建可维护和扩展的MVC(模型-视图-控制器)应用程序。在Struts2中处理文件上传功能时,通常需要依赖两个关键的第三方库:`commons-fileupload`和`...