`
virusea
  • 浏览: 1865 次
  • 性别: 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流是Java编程语言中处理输入输出操作的重要机制,它为数据传输提供了高效且灵活的方式。在Java中,文件操作是通过流的概念实现的,这允许我们读取、写入...理解并熟练掌握Java流操作文件,是Java开发中的重要技能。

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

    Java流操作之数据流实例代码详解 本文主要介绍了Java流操作之数据流实例代码,通过实例代码,展示了Java流操作的具体实现过程。下面是对标题、描述、标签和部分内容的详细解释。 标题:Java流操作之数据流实例代码...

    Java流(文件读写操作)

    ### Java流(文件读写操作) #### 一、流的分类 Java中处理文件和数据时,使用流的概念来进行操作。根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入...

    java文件与流操作code

    Java文件与流操作是Java编程中的重要组成部分,主要用于数据的读写、传输和处理。在Java中,I/O(输入/输出)系统是通过流(Stream)的概念来设计的,流是数据传输的抽象表示,可以是文件、网络连接、内存缓冲区等。...

    java字符流操作

    Java字符流操作是Java IO API中的重要组成部分,主要用于处理文本数据,支持各种编码格式的文件读写。在Java中,字符流分为输入流(InputStreamReader、BufferedReader)和输出流(OutputStreamWriter、PrintWriter...

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

    Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了流的概念,流是作为一种对数据执行...

    java实现流媒体播放

    最后,Java流媒体播放程序应具备良好的错误处理机制,如网络中断后的恢复、媒体文件格式不支持时的提示等。同时,考虑到不同的操作系统和硬件环境,程序还需要考虑跨平台的兼容性。 总的来说,Java 实现流媒体播放...

    IO流 javaio java 流

    总的来说,Java的IO流体系结构复杂而强大,它提供了多种工具和策略来处理各种数据传输场景,包括文件操作、网络通信、对象序列化等。理解并熟练运用这些流可以帮助我们构建高效、可靠的Java应用程序。

    java IO流操作详解源代码下载

    Java IO流操作是Java编程中不可或缺的一部分,它用于在程序和外部资源(如磁盘、网络、内存等)之间传输数据。在这个详细的源代码下载中,我们可以通过四篇相关的CSDN博客文章来深入理解Java IO流的工作原理和实际...

    Java字符流与字节流区别

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

    Java 输入与输出流操作

    Java 输入与输出流是Java编程语言中至关重要的概念,它涉及到数据在程序、文件、网络之间的传输。在Java中,I/O(Input/Output)处理是通过一系列的类和接口来实现的,这些都位于java.io包中。下面将详细阐述Java...

    java流.rarjava流.rar

    Java流是Java编程语言中处理数据输入和输出的重要机制,它允许程序在内存与外部设备之间,以及程序的不同部分之间高效地传输数据。Java流分为字节流和字符流两大类,字节流处理单个8位字节的数据,而字符流处理...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

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

    本文将详细讲解如何使用Java操作Excel数据,并重点探讨Java流的读取技术。 首先,Java中处理Excel文件最常用的库是Apache POI。Apache POI是一个开源项目,它提供了对Microsoft Office格式的全面支持,包括Excel(....

    JAVA 文件常用流操作.zip

    这个名为"JAVA 文件常用流操作.zip"的压缩包可能包含了各种关于Java中文件流使用的示例和教程。让我们深入探讨一下Java中的文件流操作。 首先,Java中的文件操作主要通过IO(Input/Output)流来实现。IO流分为两大...

    java文件流操作.docx

    在Java编程语言中,文件流操作是处理输入和输出数据的核心部分,特别是在处理文件时。以下是对标题"java文件流操作.docx"和描述中提到的知识点的详细说明: 1. **字节流(Byte Stream)**: Java中的`InputStream`...

    java 输入输出流

    在Java中,所有的I/O操作都基于流的概念,流是数据的序列,可以是字节流或字符流。Java I/O库提供了一系列的类来处理这些流,使得开发人员能够方便地进行数据的读取、写入和传输。 1. **字节流**:字节流是处理原始...

    java 文件操作及IO流

    Java 文件操作与IO流是Java编程中的核心概念,主要用于数据的读取、写入和传输。在Java中,文件操作通常涉及到`java.io`包下的类,如`File`、`FileOutputStream`、`OutputStreamWriter`和`BufferedWriter`等。下面将...

    java post文件流的操作

    根据提供的文件信息,...以上就是从给定文件的标题、描述、标签以及部分内容中总结出来的知识点,涵盖了Java POST请求发送与接收文件流的基础操作以及Spring MVC中处理文件上传的相关内容。希望这些信息对你有所帮助。

    基于Java的视频流处理(原创)

    在JavaCV或OpenCV中,可以使用掩模或者像素操作来实现这一功能。一旦检测到人脸,就可以在该区域应用某种处理,比如填充颜色、模糊处理或者应用预定义的图案来遮挡脸部特征。 至于"哈哈镜"效果,这是一种常见的图像...

Global site tag (gtag.js) - Google Analytics