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

原创 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;
  }
}

EOF问题,如何结束输入流输入

把输入字符输出时越到的问题, while((c=getchar())!=EOF) putchar(); 回车无法结束循环,原因是回车不是流结束符,在输入流中流结束标志是 Ctrl+Z 或...
  • KUANGPEIYU
  • KUANGPEIYU
  • 2013-07-03 15:46:11
  • 3090

java文件流读写操作

file(内存)----输入流---->【程序】----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStre...
  • zalan01408980
  • zalan01408980
  • 2018-01-08 23:13:19
  • 196

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

import java.io.IOException;import java.io.OutputStream; public class CharTerminatedOutputStream exte...
  • yipsilon
  • yipsilon
  • 2004-07-23 13:46:00
  • 925

Java中面向字符的输入流

Java中面向字符的输入流 字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是java.io包中所有字符流的父...
  • singit
  • singit
  • 2017-04-20 23:19:04
  • 411

判断文件结束的几种方法和eof()函数

看下面一段代码:ofstream ofs("a.txt"); int n = 1; while (--n) { //不进入循环体 ofs...
  • ungoneless
  • ungoneless
  • 2016-04-29 13:07:16
  • 1916

java.io.BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

public class BufferedReaderextends Reader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可...
  • yjhongzhiwen
  • yjhongzhiwen
  • 2014-09-12 19:06:56
  • 1095

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

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

InputStream——输入流读取数据缺失或多余现象

写Java、android的程序员应该对InputStream再熟悉不过了。不管是文件操作还是网络传输,只要牵扯到传输数据的时候都难免会用到它。输入流能够快速的读取我们文件 或者网络的数据,但有时候也...
  • woshimalingyi
  • woshimalingyi
  • 2015-10-18 12:53:08
  • 4671

《C陷阱与缺陷》整理一

1.词法分析中的“贪心法”     C语言的某些符号,例如/、*和=,只有一个字符长,称为单字符符号。而C语言中的其他符号,例如/*和==,以及标识符等都包含了多个字符,称为多字符符号。当C编译器读入...
  • laoniu_c
  • laoniu_c
  • 2014-10-11 08:17:01
  • 953

Java中的字节输入出流和字符输入输出流

Java中的字节输入出流和字符输入输出流下面哪个流类属于面向字符的输入流( )A BufferedWriter B FileInputStream C ObjectInputStream D Inpu...
  • you23hai45
  • you23hai45
  • 2016-02-25 16:35:46
  • 3819
收藏助手
不良信息举报
您举报文章:用于判断字符结尾的输入流类
举报原因:
原因补充:

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