知识大全 Java输入输出流详解

Posted

篇首语:只要自己上进,不怕人家看轻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java输入输出流详解相关的知识,希望对你有一定的参考价值。

Java输入输出流详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  stream代表的是任何有能力产出数据的数据源 或是任何有能力接收数据的接收源 在Java的IO中 所有的stream(包括Inputstream和Out stream)都包括两种类型

  ( )字节流

  表示以字节为单位从stream中读取或往stream中写入信息 即io包中的inputstream类和outputstream类的派生类 通常用来读取二进制数据 如图象和声音

  ( )字符流

  以Unicode字符为导向的stream 表示以Unicode字符为单位从stream中读取或往stream中写入信息

  区别

  Reader和Writer要解决的 最主要的问题就是国际化 原先的I/O类库只支持 位的字节流 因此不可能很好地处理 位的Unicode字符流 Unicode是国际化的字符集(更何况Java内置的char就是 位的Unicode字符) 这样加了Reader和Writer之后 所有的I/O就都支持Unicode了 此外新类库的性能也比旧的好

  但是 Read和Write并不是取代InputStream和OutputStream 有时 你还必须同时使用 基于byte的类 和 基于字符的类 为此 它还提供了两个 适配器(adapter) 类 InputStreamReader负责将InputStream转化成Reader 而OutputStreamWriter则将OutputStream转化成Writer

  一.流的层次结构

  定义

  ( )       java将读取数据对象成为输入流 能向其写入的对象叫输出流 结构图如下

  

  输入流

  

  输出流

  二.InputStream类

  inputstream类和outputstream类都为抽象类 不能创建对象 可以通过子类来实例化

  InputStream是输入字节数据用的类 所以InputStream类提供了 种重载的read方法 Inputstream类中的常用方法

  ( )       public abstract int read( ) 读取一个byte的数据 返回值是高位补 的int类型值

  ( )       public int read(byte b[ ]) 读取b length个字节的数据放到b数组中 返回值是读取的字节数 该方法实际上是调用下一个方法实现的

  ( )       public int read(byte b[ ] int off int len) 从输入流中最多读取len个字节的数据 存放到偏移量为off的b数组中

  ( )       public int available( ) 返回输入流中可以读取的字节数 注意 若输入阻塞 当前线程将被挂起 如果InputStream对象调用这个方法的话 它只会返回 这个方法必须由继承InputStream类的子类对象调用才有用

  ( )       public long skip(long n) 忽略输入流中的n个字节 返回值是实际忽略的字节数 跳过一些字节来读取

  ( )       public int close( ) 我们在使用完后 必须对我们打开的流进行关闭

  三.OutputStream类

  OutputStream提供了 个write方法来做数据的输出 这个是和InputStream是相对应的

   public void write(byte b[ ]) 将参数b中的字节写到输出流

   public void write(byte b[ ] int off int len) 将参数b的从偏移量off开始的len个字节写到输出流

   public abstract void write(int b) 先将int转换为byte类型 把低字节写入到输出流中

   public void flush( ) : 将数据缓冲区中数据全部输出 并清空缓冲区

   public void close( ) : 关闭输出流并释放与流相关的系统资源

  注意

   上述各方法都有可能引起异常

   InputStream和OutputStream都是抽象类 不能创建这种类型的对象

  四.FileInputStream类

  FileInputStream类是InputStream类的子类 用来处理以文件作为数据输入源的数据流 使用方法

  方式

  File fin=new File( d:/abc txt );

  FileInputStream in=new FileInputStream(fin);

  方式

  FileInputStream in=new

  FileInputStream( d: /abc txt );

  方式

  构造函数将 FileDescriptor()对象作为其参数

  FileDescriptor() fd=new FileDescriptor();

  FileInputStream f =new FileInputStream(fd);

  五.FileOutputStream类

  FileOutputStream类用来处理以文件作为数据输出目的数据流 一个表示文件名的字符串 也可以是File或FileDescriptor对象

  创建一个文件流对象有两种方法

  方式

  File f=new File( d:/abc txt );

  FileOutputStream out=new FileOutputStream (f);

  方式

  FileOutputStream out=new

  FileOutputStream( d:/abc txt );

  方式 构造函数将 FileDescriptor()对象作为其参数

  FileDescriptor() fd=new FileDescriptor();

  FileOutputStream f =new FileOutputStream(fd);

  方式 构造函数将文件名作为其第一参数 将布尔值作为第二参数

  FileOutputStream f=new FileOutputStream( d:/abc txt true);

  注意

  ( )文件中写数据时 若文件已经存在 则覆蓋存在的文件 ( )的读/写操作结束时 应调用close方法关闭流

  举例

  六.File类

  File类与InputStream / OutputStream类同属于一个包 它不允许访问文件内容

  File类主要用于命名文件 查询文件属性和处理文件目录

  举例

  七.从一个流构造另一个流

  java的流类提供了结构化方法 如 底层流和高层过滤流

  而高层流不是从输入设备读取 而是从其他流读取 同样高层输出流也不是写入输出设备 而是写入其他流

  使用 分层对象(layered objects) 为单个对象动态地 透明地添加功能的做法 被称为Decorator Pattern Decorator模式要求所有包覆在原始对象之外的对象 都必须具有与之完全相同的接口 这使得decorator的用法变得非常的透明 无论对象是否被decorate过 传给它的消息总是相同的 这也是Java I/O类库要有 filter(过滤器) 类的原因 抽象的 filter 类是所有decorator的基类 Decorator模式常用于如下的情形 如果用继承来解决各种需求的话 类的数量会多到不切实际的地步 Java的I/O类库需要提供很多功能的组合 于是decorator模式就有了用武之地

  为InputStream和OutputStream定义decorator类接口的类 分别是FilterInputStream和FilterOutputStream

  

  FilterInputStream的种类

  构造函数的参数

  DataInputStream

  与DataOutputStream配合使用 这样你就能以一种 可携带的方式(portable fashion) 从流里读取primitives了(int char long等)

  InputStream

  包含了一整套读取primitive数据的接口

  BufferedInputStream

  用这个类来解决 每次要用数据的时候都要进行物理读取 的问题 你的意思是 用缓冲区

  InputStream 以及可选的缓冲区的容量

  它本身并不提供接口 只是提供一个缓冲区 需要连到一个 有接口的对象(interface object)

  LineNumberInputStream

  跟踪输入流的行号 有getLineNumber( )和setLineNumber(int)方法

  InputStream

  只是加一个行号 所以还得连一个 有接口的对象

  PushbackInputStream

  有一个 弹压单字节 的缓冲区(has a one byte push back buffer) 这样你就能把最后读到的那个字节再压回去了

  InputStream

  主要用于编译器的扫描程序 可能是为支持Java的编译器而设计的 用的机会不多

  

  FilterOutputStream的种类

  构造函数的参数

  DataOutputStream

  与DataInputStream配合使用 这样你就可以用一种 可携带的方式(portable fashion) 往流里写primitive了(int char long 等)

  OutputStream

  包括写入primitive数据的全套接口

  PrintStream

  负责生成带格式的输出(formatted output) DataOutputStrem负责数据的存储 而PrintStream负责数据的显示

  一个OutputStream以及一个可选的boolean值 这个boolean值表示 要不要清空换行符后面的缓冲区

  应该是OutputStream对象的最终包覆层 用的机会很多

  BufferedOutputStream

  用 这个类解决 每次往流里写数据 都要进行物理操作 的问题 也就是说 用缓冲区 用flush( )清空缓冲区

  OutputStream 以及一个可选的缓冲区大小

  本身并不提供接口 只是加了一个缓冲区 需要链接一个有接口的对象

  DataInputStream类对象可以读取各种类型的数据

  DataOutputStream类对象可以写各种类型的数据

  创建这两类对象时 必须使新建立的对象指向构造函数中的参数对象 例如

  FileInputStream in=new FileInputStream( d:/abc txt );

  DataInputStream din=new DataInputStream(in);

   BufferInputStream和bufferOutputStream

  允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据

  BufferInputstream定义了两种构造函数

  ( )       BufferInputStream b= new BufferInputstream(in);

  ( )       BufferInputStream b=new BufferInputStream(in size)

  第二个参数表示指定缓冲器的大小

  同样BufferOutputStream也有两种构造函数 一次一个字节的向流中写数据

   printstream

  用于写入文本或基本类型

  两种构造函数方法

  PrintStream ps=new PrintStream(out);

  PrintStream ps=new PrintStream(out autoflush)

  第二个参数为布尔值 控制每次输出换行符时java是否刷新输出流

  八.字符流的读取和写入

  java io Reader 和 java io InputStream 组成了 Java 输入类 Reader 用于读入 位字符 也就是 Unicode 编码的字符 而 InputStream 用于读入 ASCII 字符和二进制数据

  Reader的体系结构

  ( )       FileReader

  FileReader主要用来读取字符文件 使用缺省的字符编码 有三种构造函数

   将文件名作为字符串

  FileReader f=new FileReader( c:/temp txt );

   构造函数将File对象作为其参数

  File f=new file( c:/temp txt );

  FileReader f =new FileReader(f);

   构造函数将FileDescriptor对象作为参数

  FileDescriptor() fd=new FileDescriptor()

  FileReader f =new FileReader(fd);

  ( )    charArrayReader

  将字符数组作为输入流 构造函数为

  public CharArrayReader(char[] ch);

  ( )    StringReader

  读取字符串 构造函数如下

  public StringReader(String s);

  ( )    InputStreamReader

  从输入流读取字节 在将它们转换成字符

  Public inputstreamReader(inputstream is);

  ( )    FilterReader

  允许过滤字符流

  protected filterReader(Reader r);

  ( )    BufferReader

  接受Reader对象作为参数 并对其添加字符缓冲器 使用readline()方法可以读取一行

  Public BufferReader(Reader r);

  Writer类体系结构

  ( )       FileWrite

  将字符类型数据写入文件 使用缺省字符编码和缓冲器大小

  Public FileWrite(file f);

  ( )chararrayWrite()

  将字符缓冲器用作输出

  Public CharArrayWrite();

  ( )    PrintWrite

  生成格式化输出

  public PrintWriter(outputstream os);

  ( )    filterWriter

  用于写入过滤字符流

  protected FilterWriter(Writer w);

  

  FilterOutputStream的种类

  构造函数的参数

  DataOutputStream

  与DataInputStream配合使用 这样你就可以用一种 可携带的方式(portable fashion) 往流里写primitive了(int char long 等)

  OutputStream

  包括写入primitive数据的全套接口

  PrintStream

  负责生成带格式的输出(formatted output) DataOutputStrem负责数据的存储 而PrintStream负责数据的显示

  一个OutputStream以及一个可选的boolean值 这个boolean值表示 要不要清空换行符后面的缓冲区

  应该是OutputStream对象的最终包覆层 用的机会很多

  BufferedOutputStream

  用 这个类解决 每次往流里写数据 都要进行物理操作 的问题 也就是说 用缓冲区 用flush( )清空缓冲区

  OutputStream 以及一个可选的缓冲区大小

  本身并不提供接口 只是加了一个缓冲区 需要链接一个有接口的对象

  DataInputStream类对象可以读取各种类型的数据

  DataOutputStream类对象可以写各种类型的数据

  创建这两类对象时 必须使新建立的对象指向构造函数中的参数对象 例如

  FileInputStream in=new FileInputStream( d:/abc txt );

  DataInputStream din=new DataInputStream(in);

   BufferInputStream和bufferOutputStream

  允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据

  BufferInputstream定义了两种构造函数

  ( )       BufferInputStream b= new BufferInputstream(in);

  ( )       BufferInputStream b=new BufferInputStream(in size)

  第二个参数表示指定缓冲器的大小

  同样BufferOutputStream也有两种构造函数 一次一个字节的向流中写数据

   printstream

  用于写入文本或基本类型

  两种构造函数方法

  PrintStream ps=new PrintStream(out);

  PrintStream ps=new PrintStream(out autoflush)

cha138/Article/program/Java/hx/201311/26122

相关参考

知识大全 运用异步输入输出流编写Socket进程通信

运用异步输入输出流编写Socket进程通信  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  杨健(

知识大全 用JAVA编程从键盘输入一个正整数,计算该数的各位数字之和并输出,例如输入数是5246

用JAVA编程从键盘输入一个正整数,计算该数的各位数字之和并输出,例如输入数是5246  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的

知识大全 关于流、输入和字符的理解

     流是什么?《Beginningjava》上说是输入设备——数据来源或者输出设备——数据目标的一种抽象表示我理解的就是数据(一种你的程序要处理的数据)它可以是来自硬盘上的文件你手下键盘的输入你

知识大全 重定向输出流实现程序日志

  System类中的out成员变量是java的标准输出流通常用它来输出调试信息out成员变量被定义为final类型无法直接重新复制但是可以通过setOut()方法来设置新的输出流本例通过该方法实现了

知识大全 Java Reflection (JAVA反射)详解

JavaReflection(JAVA反射)详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 php 注册时输入信息验证器的实现详解

本篇文章是对php中注册时输入信息验证器的实现方法进行了详细的分析介绍需要的朋友参考下   对输入信息进行验证的类(主要用于验证用户名密码重复密码邮箱可添加其它功能)复制代码代码如下:<

知识大全 asp 输入输出的存储过程

  输入输出的存储进程  请看以下存储进程  /*SP*/  CREATEPROCEDUREDBODELUSERALL  AS  SETNOCOUNTON  BEGIN  DELETEFROMDBO[

知识大全 java中Class对象详解

java中Class对象详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  java中把生成Cl

知识大全 输入一个正整数n(1

C语言题目:输入一个正整数n(1以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C语言题目:输入一个正整数n(1<n≤1

知识大全 Java中的finalize详解

Java中的finalize详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  程序员都了解初始