public String readString() {
		checkReadStatus();
		
		int begin = equalsPos + 1;
		if (begin - shift == prevBuf.length)
			begin = 0;

		int end = sohPos - 1;
		if (end == -1)
			end = prevBuf.length -1 + shift; 
		
		if (begin == end + 1)
			return ""; // constant
		
		if (begin >= 0 && end >= 0) {
			return new String(newBuf, begin, end - begin + 1);
		} else if (begin < 0 && end < 0 ) {
			return new String(prevBuf, begin - shift, end - begin + 1);
		}
		// split data
		begin = begin - shift;
		byte[] mergedBuf = new byte[(prevBuf.length - begin) + (end + 1)];
		System.arraycopy(prevBuf, begin, mergedBuf, 0, (prevBuf.length - begin));
		System.arraycopy(newBuf, 0, mergedBuf, (prevBuf.length - begin), end + 1);
		
		return new String(mergedBuf);
	}