天天看点

IO流缓冲区对象的使用和理解。

import

java.io.*;

class

MyBufferedReader {

private

Reader r;

public

MyBufferedReader(Reader r) {

this

.r = r;

}

public

String myReadLine() 

throws

IOException {

StringBuffer sb = 

new

StringBuffer();

int

ch = 

;

while

((ch = r.read()) != -

1

) {

if

(ch == 

'\r'

)

continue

;

if

(ch == 

'\n'

)

return

sb.toString();

else

sb.append((

char

)ch);

}

if

(sb.length() != 

)    

//有时最后一行结尾处没有换行符,此时也要返回,否者会丢失数据

return

sb.toString();

return

null

;

}

public

void

close() 

throws

IOException {

r.close();

}

}

public

class

MyBufferedReaderTest01 {   

public

static

void

main(String[] args) 

throws

IOException {    

//为了方便演示,直接抛,不进行 catch

Reader fr = 

new

FileReader(

"buf.txt"

);

MyBufferedReader myBuf = 

new

MyBufferedReader(fr);

String str = 

null

;

while

((str = myBuf.myReadLine()) != 

null

) {

System.out.println(str);

}

myBuf.close();

}

}

myReadLine()方法中,判断到 \r 时,不把 \r 加上去,继续读下一个字符,当下一个字符是 \n 时,就说明此行结束

返回这行。

但是我文本里面的字符中间有 \r\n 为什么却答应出来了,而没有换行

记事本里内容是:

abcd---0

abcd---1

abcd---2

abcd---3\r\nabcd---4

读取结果为什么是:

abcd---0

abcd---1

abcd---2

abcd---3\r\nabcd---4

碰到 \r\n 为啥没有换行呀

你看得见的\r\n,比如‘\’的ascii码是92,‘n’的ascii码是110,所以应该是两个字符。你的意思是碰到\r\n就换行吧,你可以定义一个字符串str="\\t\\n",然后做一个判断,if读到的连续两个可见字符是str,则换行。