`
virusea
  • 浏览: 1731 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA流的操作

阅读更多
  stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:
  (1)字节流
    表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。
  (2)字符流
  以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。
  区别:
  Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位 的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的 Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。
  但是,Read和Write并不是取代InputStream和OutputStream, 有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。 InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将 OutputStream转化成Writer。
  一.流的层次结构
  定义:
  (1)       java将读取数据对象成为输入流,能向其写入的对象叫输出流。结构图如下:输入流:


  
  输出流
  


  二.InputStream类
  inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。
  InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:
  (1)       public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。
  
  (2)       public int read(byte  b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的
  
  (3)       public int read(byte  b[ ], int  off, int  len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
  
  (4)       public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须 由继承InputStream类的子类对象调用才有用,
  
  (5)       public long skip(long  n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
  
  (6)       public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.
  三.OutputStream类
  OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。
  
  1.  public void write(byte  b[ ]):将参数b中的字节写到输出流。
  2. public void write(byte  b[ ], int  off, int  len) :将参数b的从偏移量off开始的len个字节写到输出流。
  3. public abstract void write(int
  注意:
  1. 上述各方法都有可能引起异常。
  2.  InputStream和OutputStream都是抽象类,不能创建这种类型的对象。
  四.FileInputStream类
  FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:
  方式1:
  File fin=new File("d:/abc.txt");
     FileInputStream  in=new FileInputStream(fin);
  方式2:
     FileInputStream  in=new
              FileInputStream("d: /abc.txt");
  方式3:
  构造函数将 FileDescriptor()对象作为其参数。
  FileDescriptor() fd=new FileDescriptor();
  FileInputStream f2=new FileInputStream(fd);
  
  五.FileOutputStream类
  FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。
  创建一个文件流对象有两种方法:
  方式1:
  File f=new File("d:/abc.txt");
  FileOutputStream  out=new FileOutputStream (f);
  方式2:
     FileOutputStream out=new
         FileOutputStream("d:/abc.txt");
  方式3:构造函数将 FileDescriptor()对象作为其参数。
  FileDescriptor() fd=new FileDescriptor();
  FileOutputStream f2=new FileOutputStream(fd);
  方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。
  FileOutputStream f=new FileOutputStream("d:/abc.txt",true);
  注意:
  (1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。
  
  举例:2-1
  六.File类
  File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。
  File类主要用于命名文件、查询文件属性和处理文件目录。
  举例:2-2
  七.从一个流构造另一个流
  java的流类提供了结构化方法,如,底层流和高层过滤流。
  而高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。
  使用"分层对象(layered objects)",为单个对象动态地,透明地添加功能的做法,被称为Decorator Pattern。Decorator 模式要求所有包覆在原始对象之外的对象,都必须具有与之完全相同的接口。这使得decorator的用法变得非常的透明--无论对象是否被 decorate过,传给它的消息总是相同的。这也是Java I/O类库要有"filter(过滤器)"类的原因:抽象的"filter"类是所有decorator的基类。Decorator模式常用于如下的情 形:如果用继承来解决各种需求的话,类的数量会多到不切实际的地步。Java的I/O类库需要提供很多功能的组合,于是decorator模式就有了用武 之地。
  为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。
  7.1 FilterInputStream
  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);
  7.2BufferInputStream和bufferOutputStream
  允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。
  BufferInputstream定义了两种构造函数
  (1)       BufferInputStream  b= new BufferInputstream(in);
  (2)       BufferInputStream b=new BufferInputStream(in,size)
    第二个参数表示指定缓冲器的大小。
  同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。
  
  7.3printstream
  用于写入文本或基本类型
  两种构造函数方法:
  PrintStream ps=new PrintStream(out);
  PrintStream ps=new PrintStream(out, autoflush)
  第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。
  
  
  
  八.字符流的读取和写入
  java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
  Reader的体系结构
  


  (1)       FileReader
     FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:
    --将文件名作为字符串
     FileReader f=new
  --构造函数将File对象作为其参数。
    File f=new
  FileReader f1=new FileReader(f);
  --构造函数将FileDescriptor对象作为参数
  FileDescriptor() fd=new FileDescriptor()
  FileReader f2=new FileReader(fd);
  (2)    charArrayReader
    将字符数组作为输入流,构造函数为:
  public CharArrayReader(char[] ch);
  (3)    StringReader
    读取字符串,构造函数如下:
  public StringReader(String s);
  (4)    InputStreamReader
  从输入流读取字节,在将它们转换成字符。
   Public inputstreamReader(inputstream is);
  (5)    FilterReader
  允许过滤字符流
  protected filterReader(Reader r);
  (6)    BufferReader
    接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。
  Public BufferReader(Reader r);
  
  Writer类体系结构


  
  (1)       FileWrite
     将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。
  Public FileWrite(file f);
  (2)chararrayWrite()
     将字符缓冲器用作输出。
    Public CharArrayWrite();
  (3)    PrintWrite
    生成格式化输出
  public PrintWriter(outputstream os);
  (4)    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);
  7.2BufferInputStream和bufferOutputStream
  允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。
  BufferInputstream定义了两种构造函数
  (1)       BufferInputStream  b= new BufferInputstream(in);
  (2)       BufferInputStream b=new BufferInputStream(in,size)
    第二个参数表示指定缓冲器的大小。
  同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。
  
  7.3printstream
  用于写入文本或基本类型
  两种构造函数方法:
  PrintStream ps=new PrintStream(out);
  PrintStream ps=new PrintStream(out, autoflush)
  第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。
  
  
  
  八.字符流的读取和写入
  java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
  Reader的体系结构
  


  (1)       FileReader
     FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:
    --将文件名作为字符串
     FileReader f=new
  --构造函数将File对象作为其参数。
    File f=new
  FileReader f1=new FileReader(f);
  --构造函数将FileDescriptor对象作为参数
  FileDescriptor() fd=new FileDescriptor()
  FileReader f2=new FileReader(fd);
  (2)    charArrayReader
    将字符数组作为输入流,构造函数为:
  public CharArrayReader(char[] ch);
  (3)    StringReader
    读取字符串,构造函数如下:
  public StringReader(String s);
  (4)    InputStreamReader
  从输入流读取字节,在将它们转换成字符。
   Public inputstreamReader(inputstream is);
  (5)    FilterReader
  允许过滤字符流
  protected filterReader(Reader r);
  (6)    BufferReader
    接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。
  Public BufferReader(Reader r);
  
  Writer类体系结构
  


  (1)       FileWrite
     将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。
  Public FileWrite(file f);
  (2)chararrayWrite()
     将字符缓冲器用作输出。
    Public CharArrayWrite();
  (3)    PrintWrite
    生成格式化输出
  public PrintWriter(outputstream os);
  (4)    filterWriter
    用于写入过滤字符流
  protected FilterWriter(Writer w);


  • 大小: 5.7 KB
  • 大小: 4.5 KB
  • 大小: 4.2 KB
  • 大小: 3.6 KB
  • 大小: 4.2 KB
  • 大小: 3.6 KB
分享到:
评论

相关推荐

    Java流操作文件

    Java流对File的各种操作方式。包括增、删、改、查、复制,文件检索等功能。

    Java流操作功能详解.pdf

    像这样的日志代码会更好: if (log.isLoggable(Level.FINE)) { ...假定你已经完成了分析,并且判断出是运行环境中Java 组件的性能需要改善。 ——参考资料:仅个人学习,未详尽测试,请自行调试!!

    Java流操作之数据流实例代码

    主要介绍了Java流操作之数据流实例代码,具有一定借鉴价值,需要的朋友可以参考下

    Java字符流与字节流区别

    Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流...

    java文件与流操作code

    java各种文件与流操作代码,帮助对i/o操作不是很熟悉的人了解java各种文件流操作

    JAVA教程IO流操作

    JAVA教程 io流操作 JAVA教程 io流操作 JAVA教程 io流操作

    Java流(文件读写操作)

    一、 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流:用于处理字节数据。 – 字符...

    Java之IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输...

    java操作excel数据的导入导出,java流的读取

    java操作excel数据的导入导出,java流的读取

    java文件流操作.docx

    java文件流操作.docx

    java字符流操作

    java字符流操作 能对各种编码的文件读和写入.

    java 流操作对文件的分割和合并的实例详解

    主要介绍了java 流操作对文件的分割和合并的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    Java Stram(流) 的操作源码

    一个全面的Java操作流的源码 有低级流及高级流的操作方法哦

    java字节流操作帮助文档

    java字节流相关操作,int转换成byte字节数组,String转换为byte字节数组,bcd码转换。

    JAVA 文件常用流操作.zip

    JAVA 文件常用流操作 包括文件的创建,重命名,删除等等。字节流,字符流,缓存流,数据流,打印流,内存流等等

    java文件流操作[定义].pdf

    java文件流操作[定义].pdf

    java post文件流的操作

    适用于javapost 文件流提交和接收数据

    java的IO流操作

    java的IO流操作,在java中是非常的知识点。开发者掌握基本点io流操作是非常重要的。

    Java8并行流中自定义线程池操作示例

    主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下

    JAVA IO流技术

    4. Java中流的概念细分 流的方向: 输入流:数据源到程序(InputStream、Reader读进来) ...节点流处于io操作的第一线,所有操作必须通过他们进行;处理流可以对节点流 进行包装,提高性能或提高程序的灵活性。

Global site tag (gtag.js) - Google Analytics