看看下面的代码
boolean flagCR = false;
out = new BufferedOutputStream(out);
do
{
if((r = in.read(buffer)) <= 0)
break;
int start = 0;
for(int i = 0; i < r; i++)
{
int c = buffer[i];
if(c == 10 && !flagCR && i >= 1)
{
out.write(buffer, start, i - start);
out.write(13);
start = i;
}
flagCR = c == 13;
} if(start < r)
out.write(buffer, start, r - start);
} while(true);
为什么每次都要先判断c是不是等于10,每次都要一个byte一个的传,为什么每传完一个都要传一个13?
是不是得看看ASCII的相关内容?
boolean flagCR = false;
out = new BufferedOutputStream(out);
do
{
if((r = in.read(buffer)) <= 0)
break;
int start = 0;
for(int i = 0; i < r; i++)
{
int c = buffer[i];
if(c == 10 && !flagCR && i >= 1)
{
out.write(buffer, start, i - start);
out.write(13);
start = i;
}
flagCR = c == 13;
} if(start < r)
out.write(buffer, start, r - start);
} while(true);
为什么每次都要先判断c是不是等于10,每次都要一个byte一个的传,为什么每传完一个都要传一个13?
是不是得看看ASCII的相关内容?
楼主【gig020617】截止到2008-07-14 00:04:07的历史汇总数据(不包括此帖):
发帖的总数量:17 发帖的总分数:265 每贴平均分数:15
回帖的总数量:39 得分贴总数量:3 回帖的得分率:7%
结贴的总数量:13 结贴的总分数:205
无满意结贴数:2 无满意结贴分:35
未结的帖子数:4 未结的总分数:60
结贴的百分比:76.47 % 结分的百分比:77.36 %
无满意结贴率:15.38 % 无满意结分率:17.07 %
楼主加油
这道题的意思是从IN读出数据,只要有数据就向文件中写入BUFFER的内容从start开始,一直到in得到的那个数为止。
写入13的目的是将CR写入文件缓冲区out 在JAVA中写入都是以ASCII码形式写入的所以你读出来的或写进去时都用一个简单的整形I接收就可以。
推荐使用DATAOUTPUTSTREAM包装类它可以实现写入或读出基本数据类型。
do
但我试过用BufferedOutputStream直接write(buffer,0,length)也可以正确写入啊?那么为什么要那么复杂呢?
break;这句不对,读到流结尾的判定条件不是 <= 0 而是 == -1