`
luotuoass
  • 浏览: 659441 次
文章分类
社区版块
存档分类
最新评论

JAVA IO

 
阅读更多

彻底明白 Java 语言中的IO系统<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。JavaIO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

1
InputOutput

  1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在JavaIO系统中,所有的stream(包括Input streamOut stream)都包括两种类型:

  1.1 字节(Byte)为导向的stream

  以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:

Input stream

  1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用

  2) StringBufferInputStream:把一个String对象作为InputStream

  3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作

  4) PipedInputStream:实现了pipe的概念,主要在线程中使用

  5) SequenceInputStream:把多个InputStream合并为一个InputStream

  Out stream

  1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中

  2) FileOutputStream 把信息存入文件中

  3) PipedOutputStream:实现了pipe的概念,主要在线程中使用

  4) SequenceOutputStream:把多个OutStream合并为一个OutStream

  1.2 以字符(Unicode为导向的stream

  以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:
Input Stream


  1) CharArrayReader:与ByteArrayInputStream对应

  2) StringReader:与StringBufferInputStream对应

  3) FileReader:与FileInputStream对应

  4) PipedReader:与PipedInputStream对应

  Out Stream

  1) CharArrayWriter:与ByteArrayOutputStream对应

  2) StringWriter:无与之对应的以字节为导向的stream

  3) FileWriter:与FileOutputStream对应

  4) PipedWriter:与PipedOutputStream对应

  以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如 CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的 是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。

 1.3 两种不现导向的stream之间的转换

  InputStreamReaderOutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:

BufferedReader in
= new BufferedReader(new InputStreamReader(System.in));

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。

为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:

Writer out
 = new BufferedWriter(new OutputStreamWriter(System.out));
 

代理对 是一个字符,它由两个 char 值序列表示: 代理项的范围为 '/uD800' '/uDBFF',后跟范围为 '/uDC00' '/uDFFF' 代理项。

错误代理元素 指的是后面不跟低代理项的高代理项,或前面没有高代理项的低代理项。

此类总是使用字符集的默认替代序列 替代错误代理元素和不可映射的字符序列。如果需要更多地控制编码过程,则应该使用 CharsetEncoder 类。

1.4 stream添加属性

  1.4.1 “stream添加属性的作用

  运用上面介绍的Java中操作IOAPI,我们就可完成我们想完成的任何操作了。但通过FilterInputStreamFilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。
  如果我们要往一个文件中写入数据,我们可以这样操作:

FileOutStream fs = new FileOutStream(“test.txt”);

  然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream FilterOutStream的子类,为FileOutStream添加我们所需要的功能。

  1.4.2 FilterInputStream的各种类型

  用于封装以字节为导向的InputStream

  1) DataInputStream:从stream中读取基本类型(intchar等)数据。

  2) BufferedInputStream:使用缓冲区

  3) LineNumberInputStream:会记录input stream内的行数,然后可以调 getLineNumber()setLineNumber(int)

  4) PushbackInputStream:很少用到,一般用于编译器开发

  用于封装以字符为导向的InputStream

  1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream

  2) BufferedReader:与BufferedInputStream对应

  3) LineNumberReader:与LineNumberInputStream对应

  4) PushBackReader:与PushbackInputStream对应

  1.4.3 FilterOutStream的各种类型

  用于封装以字节为导向的OutputStream

  1) DataIOutStream:往stream中输出基本类型(intchar等)数据。

  2) BufferedOutStream:使用缓冲区

  3) PrintStream:产生格式化输出

  用于封装以字符为导向的OutputStream

  1) BufferedWriter:与对应

  2) PrintWriter:与对应

  RandomAccessFile

  1) 可通过RandomAccessFile对象完成对文件的读写操作

  2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写

  3) 可以直接跳到文件中指定的位置

I/O
应用的一个例子

java
代码

import java.io.*;
public class TestIO{
 public static void main(String[] args)
 throws IOException{
 //1.以行为单位从一个文件读取数据
 BufferedReader in = new BufferedReader(
  new FileReader("F://nepalon//TestIO.java"));
 String s, s2 = new String();
 while((s = in.readLine()) != null)
 s2 += s + "/n";
 in.close();
 //1b. 接收键盘的输入
 BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
 System.out.println("Enter a line:");
 System.out.println(stdin.readLine());
 //2. 从一个String对象中读取数据
 StringReader in2 = new StringReader(s2);
 int c;
 while((c = in2.read()) != -1)
 System.out.println((char)c);
 in2.close();
 //3. 从内存取出格式化输入
 try{
  DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes()));
  while(true)
   System.out.println((char)in3.readByte());
 }
 catch(EOFException e){
  System.out.println("End of stream");
 }
 //4. 输出到文件
 try{
  BufferedReader in4 =new BufferedReader(new StringReader(s2));
  PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter("F://nepalon// TestIO.out")));

int lineCount = 1;
  while((s = in4.readLine()) != null)
   out1.println(lineCount++ + "" + s);
   out1.close();
   in4.close();
 }
 catch(EOFException ex){
  System.out.println("End of stream");
 }
 //5. 数据的存储和恢复
 try{
  DataOutputStream out2 =new DataOutputStream(new BufferedOutputStream(
   new FileOutputStream("F://nepalon// Data.txt")));
  out2.writeDouble(3.1415926);
  out2.writeChars("/nThas was pi:writeChars/n");
  out2.writeBytes("Thas was pi:writeByte/n");
  out2.close();
  DataInputStream in5 =new DataInputStream(
   new BufferedInputStream(new FileInputStream("F://nepalon// Data.txt")));
   BufferedReader in5br =new BufferedReader(new InputStreamReader(in5));
   System.out.println(in5.readDouble());
   System.out.println(in5br.readLine());
   System.out.println(in5br.readLine());
 }
 catch(EOFException e){
  System.out.println("End of stream");
 }
 //6. 通过RandomAccessFile操作文件
 RandomAccessFile rf = new RandomAccessFile("F://nepalon// rtest.dat", "rw");
 for(int i=0; i <10; i++)
  rf.writeDouble(i*1.414);
  rf.close();
  rf = new RandomAccessFile("F://nepalon// rtest.dat", "r");
  for(int i=0; i <10; i++)
   System.out.println("Value " + i + "" + rf.readDouble());
   rf.close();
   rf = new RandomAccessFile("F://nepalon// rtest.dat", "rw");
   rf.seek(5*8);
   rf.writeDouble(47.0001);
   rf.close();
   rf = new RandomAccessFile("F://nepalon// rtest.dat", "r");
   for(int i=0; i <10; i++)
    System.out.println("Value " + i + "" + rf.readDouble());

    rf.close();

}
 }  

关于代码的解释(以区为单位):


  1区中,当读取文件时,先把文件内容读到缓存中,当调用in.readLine()时,再从缓存中以字符的方式读取数据(以下简称缓存字节读取方式)。

  1b区中,由于想以缓存字节读取方式从标准IO(键盘)中读取数据,所以要先把标准IOSystem.in)转换成字符导向的stream,再进行BufferedReader封装。

  2区中,要以字符的形式从一个String对象中读取数据,所以要产生一StringReader类型的stream

Java IO 包中的Decorator模式

JDK为程序员提供了大量的类库,而为了保持类库的可重用性,可扩展性和灵活性,其中使用到了大量的设计模式,本文将介绍JDKI/O包中使用到的Decorator模式,并运用此模式,实现一个新的输出流类。

Decorator模式简介

  Decorator模式又名包装器(Wrapper),它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比,它更具有灵活性。

有时候,我们需要为一个对象而不是整个类添加一些新的功能,比如,给一个文本区添加一个滚动条的功能。我们可以使用继承机制来实现这一功能,但是这种方法不够灵活,我们无法控制文本区加滚动条的方式和时机。而且当文本区需要添加更多的功能时,比如边框等,需要创建新的类,而当需要组合使用这些功能时无疑将会引起类的爆炸。

  我们可以使用一种更为灵活的方法,就是把文本区嵌入到滚动条中。而这个滚动条的类就相当于对文本区的一个装饰。这个装饰(滚动条)必须与被装饰的组件(文本区)继承自同一个接口,这样,用户就不必关心装饰的实现,因为这对他们来说是透明的。装饰会将用户的请求转发给相应的组件(即调用相关的方法),并可能在转发的前后做一些额外的动作(如添加滚动条)。通过这种方法,我们可以根据组合对文本区嵌套不同的装饰,从而添加任意多的功能。这种动态的对对象添加功能的方法不会引起类的爆炸,也具有了更多的灵活性。

  以上的方法就是Decorator模式,它通过给对象添加装饰来动态的添加新的功能。如下是Decorator模式的UML图:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 293.25pt; HEIGHT: 3in" alt="" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/snow/LOCALS~1/Temp/msohtml1/01/clip_image001.jpg" o:href="http://cimg.163.com/catchpic/E/EF/EFD7757ECF4A444F276835913426D10D.jpg"></imagedata></shape>

Component为组件和装饰的公共父类,它定义了子类必须实现的方法。

  ConcreteComponent是一个具体的组件类,可以通过给它添加装饰来增加新的功能。

  Decorator是所有装饰的公共父类,它定义了所有装饰必须实现的方法,同时,它还保存了一个对于Component的引用,以便将用户的请求转发给Component,并可能在转发请求前后执行一些附加的动作。

  ConcreteDecoratorAConcreteDecoratorB是具体的装饰,可以使用它们来装饰具体的Component

  Java IO包中的Decorator模式

  JDK提供的java.io包中使用了Decorator模式来实现对各种输入输出流的封装。以下将以java.io.OutputStream及其子类为例,讨论一下Decorator模式在IO中的使用。

  首先来看一段用来创建IO流的代码:

以下是代码片段:

try {

 OutputStream out = new DataOutputStream(new FileOutputStream("test.txt"));

} catch (FileNotFoundException e) {

 e.printStackTrace();

}

  这段代码对于使用过JAVA输入输出流的人来说再熟悉不过了,我们使用DataOutputStream封装了一个FileOutputStream。这是一个典型的Decorator模式的使用,FileOutputStream相当于ComponentDataOutputStream就是一个Decorator。将代码改成如下,将会更容易理解:

以下是代码片段:

try {

 OutputStream out = new FileOutputStream("test.txt");

 out = new DataOutputStream(out);

} catch(FileNotFoundException e) {

 e.printStatckTrace();

}

  由于FileOutputStreamDataOutputStream有公共的父类OutputStream,因此对对象的装饰对于用户来说几乎是透明的。下面就来看看OutputStream及其子类是如何构成Decorator模式的:

<shape id="_x0000_i1026" style="WIDTH: 425.25pt; HEIGHT: 168.75pt" alt="" type="#_x0000_t75"><imagedata src="file:///C:/DOCUME~1/snow/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg" o:href="http://cimg.163.com/catchpic/5/5F/5FD3B7C491357BE01991CC6406584520.jpg"></imagedata></shape>

OutputStream是一个抽象类,它是所有输出流的公共父类,其源代码如下:

以下是代码片段:

public abstract class OutputStream implements Closeable, Flushable {

public abstract void write(int b) throws IOException;

...

}

它定义了write(int b)的抽象方法。这相当于Decorator模式中的Component类。

ByteArrayOutputStreamFileOutputStream PipedOutputStream 三个类都直接从OutputStream继承,以ByteArrayOutputStream为例:

以下是代码片段:

public class ByteArrayOutputStream extends OutputStream {

protected byte buf[];

protected int count;

public ByteArrayOutputStream() {

this(32);

}

public ByteArrayOutputStream(int size) {

if (size 0) {

throw new IllegalArgumentException("Negative initial size: " + size);

}

buf = new byte[size];

}

public synchronized void write(int b) {

int newcount = count + 1;

if (newcount buf.length) {

byte newbuf[] = new byte[Math.max(buf.length 〈〈 1, newcount)];

System.arraycopy(buf, 0, newbuf, 0, count);

buf = newbuf;

}

buf[count] = (byte)b;

count = newcount;

}

}

它实现了OutputStream中的write(int b)方法,因此我们可以用来创建输出流的对象,并完成特定格式的输出。它相当于Decorator模式中的ConcreteComponent类。

接着来看一下FilterOutputStream,代码如下:

以下是代码片段:

public class FilterOutputStream extends OutputStream {

protected OutputStream out;

public FilterOutputStream(OutputStream out) {

this.out = out;

}

public void write(int b) throws IOException {

out.write(b);

}

...

}

同样,它也是从OutputStream继承。但是,它的构造函数很特别,需要传递一个OutputStream的引用给它,并且它将保存对此对象的引用。而如果没有具体的OutputStream对象存在,我们将无法创建FilterOutputStream。由于out既可以是指向FilterOutputStream类型的引用,也可以是指向ByteArrayOutputStream等具体输出流类的引用,因此使用多层嵌套的方式,我们可以为ByteArrayOutputStream添加多种装饰。这个FilterOutputStream类相当于Decorator模式中的Decorator类,它的write(int b)方法只是简单的调用了传入的流的write(int b)方法,而没有做更多的处理,因此它本质上没有对流进行装饰,所以继承它的子类必须覆盖此方法,以达到装饰的目的。

BufferedOutputStream DataOutputStreamFilterOutputStream的两个子类,它们相当于Decorator模式中的ConcreteDecorator,并对传入的输出流做了不同的装饰。以BufferedOutputStream类为例:

以下是代码片段:

public class BufferedOutputStream extends FilterOutputStream {

...

private void flushBuffer() throws IOException {

if (count 0) {

out.write(buf, 0, count);

count = 0;

}

}

public synchronized void write(int b) throws IOException {

if (count = buf.length) {

flushBuffer();

}

buf[count++] = (byte)b;

}

...

}

  这个类提供了一个缓存机制,等到缓存的容量达到一定的字节数时才写入输出流。首先它继承了FilterOutputStream,并且覆盖了父类的write(int b)方法,在调用输出流写出数据前都会检查缓存是否已满,如果未满,则不写。这样就实现了对输出流对象动态的添加新功能的目的。

下面,将使用Decorator模式,为IO写一个新的输出流。

了解了OutputStream及其子类的结构原理后,我们可以写一个新的输出流,来添加新的功能。这部分中将给出一个新的输出流的例子,它将过滤待输出语句中的空格符号。比如需要输出"java io OutputStream",则过滤后的输出为"javaioOutputStream"。以下为SkipSpaceOutputStream类的代码:

以下是代码片段:

import java.io.FilterOutputStream;

import java.io.IOException;

import java.io.OutputStream;

/**

* A new output stream, which will check the space character

* and won’t write it to the output stream.

* @author Magic

*

*/

public class SkipSpaceOutputStream extends FilterOutputStream {

 public SkipSpaceOutputStream(OutputStream out) {

  super(out);

 }

 /**

 * Rewrite the method in the parent class, and

 * skip the space character.

 */

 public void write(int b) throws IOException{

  if(b!=’ ’){

   super.write(b);

  }

 }

}

它从FilterOutputStream继承,并且重写了它的write(int b)方法。在write(int b)方法中首先对输入字符进行了检查,如果不是空格,则输出。

以下是一个测试程序:

以下是代码片段:

import java.io.BufferedInputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

/**

* Test the SkipSpaceOutputStream.

* @author Magic

*

*/

public class Test {

 public static void main(String[] args){

  byte[] buffer = new byte[1024];

  /**

  * Create input stream from the standard input.

  */

  InputStream in = new BufferedInputStream(new DataInputStream(System.in));

  /**

  * write to the standard output.

  */

  OutputStream out = new SkipSpaceOutputStream(new DataOutputStream(System.out));

  try {

   System.out.println("Please input your words: ");

   int n = in.read(buffer,0,buffer.length);

   for(int i=0;in;i++){

    out.write(buffer[i]);

   }

  } catch (IOException e) {

   e.printStackTrace();

  }

 }

}

执行以上测试程序,将要求用户在console窗口中输入信息,程序将过滤掉信息中的空格,并将最后的结果输出到console窗口。比如:

以下是引用片段:

Please input your words:

a b c d e f

abcdef

  在java.io包中,不仅OutputStream用到了Decorator设计模式,InputStreamReaderWriter等都用到了此模式。而作为一个灵活的,可扩展的类库,JDK中使用了大量的设计模式,比如在Swing包中的MVC模式,RMI中的Proxy模式等等。对于JDK中模式的研究不仅能加深对于模式的理解,而且还有利于更透彻的了解类库的结构和组成。

分享到:
评论

相关推荐

    Java IO应届生培训讲义

    Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...

    Java IO知识点

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...

    java IO教程,java IO教程,java IO教程

    java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...

    java io 结构图

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了一整套类库,使得开发者能够有效地读取和写入数据到不同的源和目标,如文件、网络、内存缓冲区等。Java IO体系结构设计得...

    Java IO_NIO

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架,它提供了丰富的类库,使得程序能够与各种设备、文件、网络进行数据交互。然而,传统的IO模型在处理大量并发连接时表现出效率较低的问题,...

    java IO.chm

    《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...

    Java教程之javaIO详解

    Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...

    Java IO处理类的汇总

    Java IO处理类是Java平台中用于输入输出操作的核心部分,它允许程序与各种类型的输入源(如文件、网络连接)以及输出目标(如显示器、打印机)进行交互。本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、...

    Java IO 编程集合

    Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...

    JAVA IO流技术

    Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...

    Java IO 使用例

    在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...

    java io.pdf

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许程序员在程序之间传输数据,包括从文件、网络、内存缓冲区到其他程序或系统组件。Java IO API是Java平台的...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    javaIo操作的基础代码

    Java IO操作是Java编程中的重要组成部分,主要用于处理输入和输出数据。在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java...

    Java IO 与 装饰模式

    Java IO 与 装饰模式 在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。

    java io流 案例

    Java IO流是Java平台中的重要组成部分,用于处理输入和输出操作。它允许程序与外部设备如硬盘、网络、内存等进行数据传输。IO流的概念基于流(Stream)模型,数据以字节或字符序列的形式流动。Java IO库提供了丰富的...

    java io流学习笔记1

    Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...

    Java IO 工具类大全

    Java IO(Input/Output)是Java平台中处理输入与输出数据的核心部分,它提供了丰富的类库,使得开发者能够高效地进行文件、网络、内存以及其他I/O流的操作。本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在...

Global site tag (gtag.js) - Google Analytics