疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java IO流的简单介绍及应用


 

   

  java中流的本质是数据传输,流的主要作用是为了改善程序性能并且使用方便,根据处理数据类型的不同分为:字节流和字符流。

  字节流(8bit)包含两个抽象类:InputStream(输入流)和OutputStream(输出流)。字符流(16bit)一次可读取多个字节包含:Reader(输入流)和Writer(输出流)。字节流和字符流最主要的区别是:自接力在处理输入输出时不会用到缓存,而字符流会用到缓存。

  下面是IO流的应用实例,需求是设计一个输入流的类,该类的作用为在读该文件时把文件中的大写字母转换为小写字母,把小写字母转换为大写字母。通过抽象装饰类FilterInputStream来实现一个装饰类,通过调用InputStream 类或

  其子类提供方法加上一定的逻辑判断代码可以简单地实现这个功能。例如test.txt中的aaaBBBcccDDD123,就会输出为:AAAbbbCCCddd123.

  实现类:

  package lianxi_book;

  import java.io.FilterInputStream;

  import java.io.IOException;

  import java.io.InputStream;

  /*

  * 需求:设计一个输入流的类,该类的作用为在读该文件时把文件中的大写字母转换为小写字母,把小写字母转换为大写字母。

  *

  * 分析:

  * 通过抽象装饰类FilterInputStream来实现一个装饰类,通过调用InputStream 类或

  * 其子类提供方法加上一定的逻辑判断可以简单的实现这个功能。

  *

  */

  public class MyOwnInputStream extends FilterInputStream{

  public MyOwnInputStream(InputStream in){

  super(in);

  }

  public int read() throws IOException{

  int c= 0;

  if((c=super.read())!=-1){

  //把小写转换成大写

  if(Character.isLowerCase((char) c)){

  return Character.toUpperCase((char) c);

  }//把大写转换成小写

  else if(Character.isUpperCase((char) c)){

  return Character.toLowerCase((char) c);

  }//如果不是字母保持不变

  else{

  return c;

  }

  }else{

  return -1;

  }

  }

  }

  测试类:

  package lianxi_book;

  import java.io.BufferedInputStream;

  import java.io.FileInputStream;

  import java.io.IOException;

  import java.io.InputStream;

  public class Test {

  public static void main(String[] args) {

  int c;

  try {

  InputStream is = new MyOwnInputStream(new BufferedInputStream(new FileInputStream("test.txt")));

  while((c=is.read())>0){

  System.out.print((char) c);

  }

  is.close();

  } catch (IOException e) {

  // TODO Auto-generated catch block

  //e.printStackTrace();

  System.out.println(e.getMessage());

  }

  }

  }