add peekablereader and exception