Java的标准数据流

开发 后端
Java输入输出(I/O)API是Java里最重要的API之一。Java I/O提供了许多API提供对文件,内存,socket的读写。本文对Java I/O包括NIO等做一个总结。

Java输入输出(I/O)API是Java里最重要的API之一。Java I/O提供了许多API提供对文件,内存,socket的读写。本文对Java I/O包括NIO等做一个总结。

Java里的流(Stream)概念:

流是一种有序的字节数据对象。流又分为输入流(InputStream)和输出流(OutputStream)。输入流从外部资源(文件,内存,socket等)读入字节数据到Java对象;输出流则把Java对象(字节数据等)写入到外部资源。

所有Java I/O都可归类为以下两种:

1,字节数据输入输出I/O

2,文字列数据输入输出I/O

所有的字节数据输入输出I/O都继承自java.io.InputStream和java.io.OutputStream接口。

字节数据输入流及其派生类:

  1. java.io.InputStream   
  2. +--java.io.ByteArrayInputStream  
  3. +--java.io.BufferedInputStream  
  4. +--java.io.DataInputStream  
  5. +--java.io.FileInputStream  
  6. +--java.io.FilterInputStream  
  7. +--java.io.ObjectInputStream  
  8. +--java.io.PipedInputStream  
  9. +--java.io.PushbackInputStream  
  10. +--java.io.SequenceInputStream  
  11. +--java.io.StringBufferInputStream 

字节数据输出流及其派生类:

  1. java.io.OutputStream  
  2. +--java.io.BufferedOutputStream  
  3. +--java.io.ByteArrayOutputStream  
  4. +--java.io.DataOutputStream  
  5. +--java.io.FileOutputStream  
  6. +--java.io.FilterOutputStream  
  7. +--java.io.ObjectOutputStream  
  8. +--java.io.PipedOutputStream 

所有的文字列数据输入输出I/O都继承自java.io.Reader和java.io.Writer接口。

文字列数据输入流及其派生类:

  1. java.io.Reader  
  2. +--java.io.BufferedReader  
  3. +--java.io.CharArrayReader  
  4. +--java.io.FileReader  
  5. +--java.io.FilterReader  
  6. +--java.io.InputStreamReader  
  7. +--java.io.LineNumberReader  
  8. +--java.io.PipedReader  
  9. +--java.io.PushbackReader  
  10. +--java.io.StringReader 

文字列数据输出流及其派生类:

  1. java.io.Writer  
  2. +--java.io.BufferedWriter  
  3. +--java.io.CharArrayWriter  
  4. +--java.io.FilterWriter  
  5. +--java.io.OutputStreamWriter  
  6. +--java.io.FileWriter  
  7. +--java.io.PipedWriter  
  8. +--java.io.PrintWriter  
  9. +--java.io.StringWriter 

它们(java.io)之间的关系可以用下图来表示:

 

 

JDK 1.4以前的版本的Java I/O操作集中在java.io这个包中,是基于流的阻塞(blocking)API。

从JDK1.4开始引入了New I/O(NIO)API。该API包含在java.nio.*里。NIO有时也叫做nonblocking I/O(非阻塞I/O),NIO基于缓冲区,并能提供非阻塞(non-blocking)IO操作。

NIO主要包:

java.nio

定义了Buffer及其数据类型相关的子类。

java.nio.channels

定义了高速文件处理/socket通信处理等I/O处理的Channel接口以及这些接口在文件系统和网络通信等上的实现类。同时可以通过Selector类,提供了进行非阻塞I/O操作的方法。该包是NIO API的核心包。

java.nio.charset

定义了字符编码和解码处理类。

NIO接口/类的层次结构:

  1. java.nio.ByteBuffer  
  2. java.nio.channels.Channel  
  3. +--java.nio.channels.ServerSocketChannel  
  4. +--java.nio.channels.ReadableByteChannel  
  5. +--java.nio.channels.ScatteringByteChannel  
  6. +--java.nio.channels.ByteChannel  
  7. +--java.nio.channels.WritableByteChannel  
  8. +--java.nio.channels.ByteChannel  
  9. +--java.nio.channels.GatheringByteChannel  
  10. java.nio.channels.Slector  
  11. java.nio.channels.ScatteringByteChannel, ByteChannel, GatheringByteChannel  
  12. +--java.nio.channels.FileChannel  
  13. +--java.nio.channels.SocketChannel  
  14. +--java.nio.channels.DatagramChannel  
  15. java.nio.charset.Charset  
  16. java.nio.charset.CharsetEncoderjava.nio.charset.CharsetDecoder 

NIO层次结构图:

 

***节 数据流的基本概念

◆ 理解数据流

流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。

◆ 的标准数据流

标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种:

标准输入studin,对象是键盘。

标准输出stdout,对象是屏幕。

标准错误输出stderr,对象也是屏幕。

例 8.1 从键盘输入字符。

本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,count保存实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。Read方法在java.io包中,而且要抛出IOException异常。程序如下:

  1. import java.io.*;  
  2. public class Input1  
  3. {  
  4. public static void main(String args[]) throws IOException  
  5. {   
  6. System.out.println("Input: ");  
  7. byte buffer[] = new byte[512]; //输入缓冲区  
  8. int count = System.in.read(buffer); //读取标准输入流  
  9. System.out.println("Output: ");  
  10. for (int i=0;i<COUNT;I++) 输出buffer元素值  
  11. {  
  12. System.out.print(" "+buffer[i]);  
  13. }  
  14. System.out.println();  
  15. for (int i=0;i<COUNT;I++) 按字符方式输出buffer  
  16. {  
  17. System.out.print((char) buffer[i]);  
  18. }  
  19. System.out.println("count = "+ count); //buffer实际长度  
  20. }  

程序中,main方法采用throws子句抛出IOException异常交由系统处理。

Java.io包中的数据流及文件类

字节流:

从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。

  • InputStream、OutputStream
  • FileInputStream、FileOutputStream
  • PipedInputStream、PipedOutputStream
  • ByteArrayInputStream、ByteArrayOutputStream
  • FilterInputStream、FilterOutputStream
  • DataInputStream、DataOutputStream
  • BufferedInputStream、BufferedOutputStream

字符流:

从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位

  • Reader、Writer
  • InputStreamReader、OutputStreamWriter
  • FileReader、FileWriter
  • CharArrayReader、CharArrayWriter
  • PipedReader、PipedWriter
  • FilterReader、FilterWriter
  • BufferedReader、BufferedWriter
  • StringReader、StringWriter

原文链接:http://www.cnblogs.com/aviva/archive/2008/03/28/1127440.html

【编辑推荐】

  1. 全面解读Java NIO工作原理
  2. OA市场格局轮廓突显 JAVA成高端用户主流选择
  3. Java NIO 异步读取网络数据
  4. Java NIO(异步IO)Socket通信例子
  5. 影响Java NIO框架性能的因数
责任编辑:林师授 来源: aviva的博客
相关推荐

2009-08-19 10:41:12

Java输入数据流

2016-11-14 19:01:36

数据流聊天系统web

2020-02-06 19:12:36

Java函数式编程编程语言

2022-03-18 08:57:17

前端数据流选型

2017-11-16 19:26:34

海量数据算法计算机

2021-10-27 10:43:36

数据流中位数偶数

2011-04-14 14:43:38

SSISTransformat

2012-07-30 08:31:08

Storm数据流

2019-12-19 14:38:08

Flink SQL数据流Join

2011-04-19 09:18:02

SSIS数据转换

2013-10-21 10:58:50

微软大数据SQL Server

2009-07-15 09:06:11

Linux图形系统X11的CS架构

2014-12-02 10:56:47

TCPIP交互数据流

2014-02-11 08:51:15

亚马逊PaaSAppStream

2021-06-29 19:24:42

数据流数据排序

2023-07-24 08:20:11

StreamJava方式

2023-08-18 09:29:59

Java数据流

2023-07-26 00:20:20

Java 8数组方式

2020-08-20 11:24:31

物联网数据技术

2019-06-18 13:51:08

大数据流处理新兴市场
点赞
收藏

51CTO技术栈公众号