看看下面的代码
 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的相关内容?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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 %                  
    楼主加油
      

  2.   

    嘿嘿:
    这道题的意思是从IN读出数据,只要有数据就向文件中写入BUFFER的内容从start开始,一直到in得到的那个数为止。
    写入13的目的是将CR写入文件缓冲区out 在JAVA中写入都是以ASCII码形式写入的所以你读出来的或写进去时都用一个简单的整形I接收就可以。
    推荐使用DATAOUTPUTSTREAM包装类它可以实现写入或读出基本数据类型。
      

  3.   

    new BufferedOutputStream(out);
                    do
      

  4.   

    还是有所不明白,为什么在每次write之前都要检查c是不是10?并且每写完一个byte都要写一个13?13是换行的话也不用每个byte后都要写阿
      

  5.   

    明白了,10是换行,13是回车,检查到一行的结束是10, 进行写入,然后回车。
    但我试过用BufferedOutputStream直接write(buffer,0,length)也可以正确写入啊?那么为什么要那么复杂呢?
      

  6.   

    if((r = in.read(buffer)) <= 0)
                            break;这句不对,读到流结尾的判定条件不是 <= 0 而是 == -1
      

  7.   

    十进制的 10 在 Unicode 中是换行符(LF)的编码值,13 是回车符(CR)的编码值,这段代码的作用应该是将每行文本后的换行符替换成一个回车符加一个换行符。在 Windows 系统下使用一个回车符紧跟一个换行符来表示一行结束的,但 Linux 等操作系统不同,它们只用一个换行符来表示一行的结束。