用于判断字符结尾的输入流类

原创 2004年07月23日 13:44:00

import java.io.IOException;
import java.io.InputStream;

public class CharTerminatedInputStream extends InputStream {

  private InputStream in;

  private int match[];

  private int buffer[];

  private int pos = 0;

  private boolean endFound = false;


  public CharTerminatedInputStream(InputStream in, byte[] terminator) {
    if (terminator == null) {
      throw new IllegalArgumentException("The terminating character array cannot be null.");
    }
    if (terminator.length == 0) {
      throw new IllegalArgumentException("The terminating character array cannot be of zero length.");
    }
    match = new int[terminator.length];
    buffer = new int[terminator.length];
    for (int i = 0; i < terminator.length; i++) {
      match[i] = (int) terminator[i];
      buffer[i] = (int) terminator[i];
    }
    this.in = in;
  }


  public synchronized void reset() {
    endFound = false;
    pos = 0;
  }


  public int read() throws IOException {

    if (endFound) {
      return -1;
    }

    if (pos == 0) {
      int b = in.read();
      if (b == -1) {
        endFound = true;
        return -1;
      }
      if (b != match[0]) {
        return b;
      }
      buffer[0] = b;
      pos++;
    } else {
      if (buffer[0] != match[0]) {
        return topChar();
      }
    }
    for (int i = 0; i < match.length; i++) {
      if (i >= pos) {
        int b = in.read();
        if (b == -1) {
          return topChar();
        }
        buffer[pos] = b;
        pos++;
      }
      if (buffer[i] != match[i]) {
        return topChar();
      }
    }
    endFound = true;
    return -1;
  }


  private int topChar() {
    int b = buffer[0];
    if (pos > 1) {
      System.arraycopy(buffer, 1, buffer, 0, pos - 1);
    }
    pos--;
    return b;
  }
}

Window对于cin输入流结束的判断

对于while(cin>>temp)的如何退出循环引出的思考
  • u011675745
  • u011675745
  • 2016年07月31日 23:15
  • 505

【C++】输入流小结

几个常用的c++ cin成员函数: 1.cin.get(); 2.cin.get(字符); 3.cin.get(字符数组指针,要读取的最大字符数+1,结束字符(默认为‘\n’)); 4.cin...
  • snow_114
  • snow_114
  • 2014年10月20日 22:28
  • 671

Java 输入流与输出流的详细介绍

Java中的流分为两种:  1)  字节流:数据流中最小的数据单元是字节  2)  字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。 在j...
  • qq_22118507
  • qq_22118507
  • 2016年06月14日 17:55
  • 509

Java IO字节输入流常见类进行分析(一)

一、InputStream 所有字节输入的父类,是一个抽象类。 public abstract int read() throws IOException从流中读取下一个字节的数据,返回的数据是i...
  • zxdfc
  • zxdfc
  • 2017年02月19日 23:55
  • 396

C++ 标准输入流总结

既然上一篇文章对标准输出流cout的格式化输出进行了总结,那么这篇文章就对c++的标准输入流用法进行全面总结。     以下是关于C++编程中cin的几个常见用法:     1. cin     用...
  • baidu_28312631
  • baidu_28312631
  • 2015年08月11日 11:22
  • 1730

字节输入流与字符输入流的一些使用

流概述: 把计算机中各种不同的输入输出(键盘,文件,网络)源抽象为流 1.按流向: 输入流(input):通过程序只能从流中读取字节或者字符数据 输出流(output):只能通过程序向外输出字...
  • qq_39262610
  • qq_39262610
  • 2017年07月23日 19:51
  • 290

Java-IO之BufferedReader(字符缓冲输入流)

BufferedReader是缓冲字符输入流,继承于Reader,BufferedReader的作用是为其他字符输入流添加一些缓冲功能。 BufferedReader主要的函数列表: ...
  • qq924862077
  • qq924862077
  • 2016年10月05日 20:46
  • 2350

输入流对象cin读取输入流的三种方式

输入流对象cin读取输入流的三种方式cin 输入流对象有三种读取控制台输入的方法。分别为: 使用“>>”运算符,这种方法只能读取单个单词,cin使用空白(空格、制表符和换行符)来确定字符串的结束位置 ...
  • hc1025808587
  • hc1025808587
  • 2016年04月18日 16:04
  • 1771

关于类模板重载输入输出流的思考

在模板中输入输出流的重载,若使用友元在类模板中声明,在类模板外实现;那么链接时就会报错,可以使用五种方式来实现输入输出流的重载. 第一种方法:将输入流输出流的重载的实现写在类模板中 templat...
  • a20102110080212
  • a20102110080212
  • 2013年05月14日 22:08
  • 519

使用输入流写一个对象

用输入流写入一个对象
  • freshbin000
  • freshbin000
  • 2016年09月19日 22:33
  • 632
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用于判断字符结尾的输入流类
举报原因:
原因补充:

(最多只允许输入30个字)