001 package com.hs.mail.io; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 import java.io.InputStreamReader; 006 007 public class LineReader extends InputStreamReader { 008 009 private int maxLineLen = 2048; 010 011 public LineReader(InputStream in) { 012 super(in); 013 } 014 015 public String readLine() throws IOException { 016 StringBuffer sb = new StringBuffer(); 017 int bytesRead = 0; 018 while (bytesRead++ < maxLineLen) { 019 int iRead = read(); 020 switch (iRead) { 021 case '\r': 022 iRead = read(); 023 if (iRead == '\n') { 024 return sb.toString(); 025 } 026 // fall through 027 case '\n': 028 // LF without a preceding CR 029 throw new IOException("Bad line terminator"); 030 case -1: 031 // premature EOF 032 return null; 033 default: 034 sb.append((char) iRead); 035 } 036 } 037 throw new IOException("Exceeded maximun line length"); 038 } 039 040 }