CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

一个小段关于FilterOutputStream类的程序,不明白其原理。请高手指教

楼主HughesCN(Hughes)2005-03-02 15:46:24 在 Java / J2SE / 基础类 提问

write()和flush()看不懂,这样做的原理是什么?请高手指教  
  比如为什么要super.write(toBase64[(_buffer[0]&0xfc)>>2]);  
  ===========================================  
  class   Base64OutputStream    
          extends   FilterOutputStream   {  
   
      /**  
        *   The   constructor.  
        *  
        *   @param   out   The   stream   used   to   write   to.  
        */  
      public   Base64OutputStream(OutputStream   out)  
      {  
          super(out);  
      }  
   
      /**  
        *   Write   a   byte   to   be   encoded.  
        *  
        *   @param   c   The   character   to   be   written.  
        *   @exception   java.io.IOException  
        */  
      public   void   write(int   c)   throws   IOException  
      {  
          _buffer[_index]   =   c;  
          _index++;  
          if   (   _index==3   )   {  
              super.write(toBase64[(_buffer[0]&0xfc)>>2]);  
              super.write(toBase64[((_buffer[0]   &0x03)<<4)   |  
                                                        ((_buffer[1]&0xf0)>>4)]);  
              super.write(toBase64[((_buffer[1]&0x0f)<<2)   |  
                                                        ((_buffer[2]&0xc0)>>6)]);  
              super.write(toBase64[_buffer[2]&0x3f]);  
              _column+=4;  
              _index=0;  
              if   (   _column>=76   )   {  
                  super.write('\n');  
                  _column   =   0;  
              }  
          }  
      }  
   
      /**  
        *   Ensure   all   bytes   are   written.  
        *  
        *   @exception   java.io.IOException  
        */  
      public   void   flush()  
      throws   IOException  
      {  
          if   (   _index==1   )   {    
              super.write(toBase64[(_buffer[2]&0x3f)   >>   2]);  
              super.write(toBase64[(_buffer[0]&0x03)   <<   4]);  
              super.write('=');  
              super.write('=');  
          }   else   if   (   _index==2   )   {  
              super.write(toBase64[(_buffer[0]&0xfc)   >>   2]);  
              super.write(toBase64[((_buffer[0]&0x03)<<4)|  
                                                        ((_buffer[1]&0xf0)>>4)]);  
              super.write(toBase64[(_buffer[1]&0x0f)<<2]);  
              super.write('=');  
          }  
      }  
   
      /**  
        *   Allowable   characters   for   base-64.  
        */  
      private   static   char[]   toBase64   =  
      {   'A','B','C','D','E','F','G','H',  
          'I','J','K','L','M','N','O','P',  
          'Q','R','S','T','U','V','W','X',  
          'Y','Z','a','b','c','d','e','f',  
          'g','h','i','j','k','l','m','n',  
          'o','p','q','r','s','t','u','v',  
          'w','x','y','z','0','1','2','3',  
          '4','5','6','7','8','9','+','/'};  
   
      /**  
        *   Current   column.  
        */  
      private   int   _column=0;  
   
      /**  
        *   Current   index.  
        */  
      private   int   _index=0;  
   
      /**  
        *   Outbound   buffer.  
        */  
      private   int   _buffer[]   =   new   int[3];  
   
  }  
  新手没多少分了,对不住阿 问题点数:30、回复次数:2Top

1 楼zrtl(刚从软件园回来)回复于 2005-03-02 15:55:28 得分 30

write()方法是把数据写到流里去,这个很容易懂的吧。  
  flush()方法是把流里的数据清掉,并把这些数据保存到文件中。如果你只是用write来写数据,在程序运行中,文件的内容是不会更新的,用flush后就把文件保存了最新的内容。  
  同时注意,如果用了close()把流关闭,那么等于自动使用了一次flush()Top

2 楼HughesCN(Hughes)回复于 2005-03-02 20:07:42 得分 0

单个语句我明白,我不明白的是  
  为什么要  
              super.write(toBase64[(_buffer[0]&0xfc)>>2]);  
              super.write(toBase64[((_buffer[0]   &0x03)<<4)   |  
                                                        ((_buffer[1]&0xf0)>>4)]);  
              super.write(toBase64[((_buffer[1]&0x0f)<<2)   |  
                                                        ((_buffer[2]&0xc0)>>6)]);  
              super.write(toBase64[_buffer[2]&0x3f]);  
  这样操作的原理是什么  
  Top

相关问题

  • 做了个hook程序,有点不明白原理
  • 帮我看看,这段程序中的计算速度是什么原理。我看不明白。
  • 即时通讯程序原理?
  • 想做一个断点续传的程序,基本原理我明白(就是采用移动文件指针的方法),但我不知道怎么判断前后两次传,传输的两个文件是不是同一个文
  • 看不明白的简单程序?
  • 这个程序我有点不明白
  • 在windows中的程序注册吗的原理是什么?
  • 请教关于程序外壳变换的原理
  • 请提示一下“键盘幽灵”的程序原理?
  • 谁知道下载程序如(netants)的多线程原理?

关键词

  • 原理
  • tobase64
  • super
  • buffer
  • write
  • outputstream
  • ioexception
  • column

得分解答快速导航

  • 帖主:HughesCN
  • zrtl

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo