您所在的位置:主页 > JAVA技术 >

Java IO流CharArrayReader类和PushbackReader类详解

时间:2015-08-28 11:47来源:未知 作者:os 点击:

  
 
  CharArrayReader类
 
  Java IO的CharArrayReader类用来将指定的字符串构造成一个字符输入缓冲区提供给其他字符IO类使用。如将一个字符串要转换成一个输入字符流,我们可以将该字符串写出到磁盘文件,然后再将磁盘文件读入转换成字符串入流,但是这样耗时和浪费资源。此时,我们就可以使用CharArrayReader类来实现这个功能。
 
  实例:将指定的字符串转换成字符输入流。
 
  package io.reader;
 
  import java.io.CharArrayReader;
 
  public class CharArrayReaderTest {
 
  public static void main(String[] args) {
 
  CharArrayReader reader = null;
 
  try {
 
  String str = "我喜欢java编程。";
 
  // 构建字符输入流
 
  reader = new CharArrayReader(str.toCharArray());
 
  // 从字符输入流读取字符
 
  char[] chars = new char[1024];
 
  int len = reader.read(chars);
 
  System.out.println( new String(chars, 0, len) );
 
  } catch(Exception e) {
 
  e.printStackTrace();
 
  }
 
  }
 
  }
 
  输出结果:
 
  我喜欢java编程。
 
 
  PushbackReader类
 
  PushbackReader类提供了将将字符推回到流的字符流Reader。你可以通过PushbackReader(Reader in, int size)构造方法来构造推回PushbackReader对象,size表示回推字符数组大小。
 
  实例:读取document目录下面的reader01.txt文件,然后将读取的字符数组转换成字符串,查看字符串中是否存在指定的字符串。如果存在指定的字符串,则将本次读取的字符数组推回到输入字符流中,然后再将其读取出来,进行输出(在输出前后追加<<和>>)。
 
  package io.reader;
 
  import java.io.FileInputStream;
 
  import java.io.IOException;
 
  import java.io.InputStreamReader;
 
  import java.io.PushbackReader;
 
  public class PushbackReaderTest {
 
  public static void main(String[] args) {
 
  PushbackReader reader = null;
 
  try {
 
  // 构建PushbackReader字符流对象
 
  reader = new PushbackReader(
 
  new InputStreamReader(
 
  new FileInputStream("document/reader01.txt")), 64);
 
  char[] buffer = new char[64];
 
  int len = 0;
 
  while ( (len = reader.read(buffer)) != -1 ) {
 
  String tempStr = new String(buffer, 0, len);
 
  System.out.println( tempStr );
 
  // 判断本次读取的字符串中是否存在“you”字符串
 
  if ( tempStr.indexOf("you") != -1 ) {
 
  // 将本次读取的字符数组推回到输入字符流
 
  reader.unread(tempStr.toCharArray());
 
  // 读取推回的字符流,然后输出
 
  if ( (len = reader.read(buffer)) != -1 ) {
 
  System.out.println("<<" + new String(buffer, 0, len) + ">>");
 
  }
 
  }
 
  }
 
  } catch (Exception e) {
 
  e.printStackTrace();
 
  } finally {
 
  if ( null != reader ) {
 
  try {
 
  reader.close();
 
  reader = null;
 
  } catch (IOException e) {
 
  e.printStackTrace();
 
  }
 
  }
 
  }
 
  }
 
  }
 
 
 
输出结果:
 
It’s not my way to love you just when no one’s looking.
 
It’s no
 
<<It’s not my way to love you just when no one’s looking.
 
It’s no>>
 
t my way to take your hand if I’m not sure.
 
It’s not my way to 
 
<<t my way to take your hand if I’m not sure.
 
It’s not my way to >>
 
let you see what’s going on inside of me.
 
When it’s a love you’
 
<<let you see what’s going on inside of me.
 
When it’s a love you’>>
 
ll not be needing you’re not free.
 
Please stop pulling at my sl
 
<<ll not be needing you’re not free.
 
Please stop pulling at my sl>>
 
eeve if you’re just playing.
 
If you’ll not take the things you 
 
<<eeve if you’re just playing.
 
If you’ll not take the things you >>
 
make me want to give.