read char by char