msnlib中的MimeMessage.parse代码需要修改

msnlib源代码中MimeMessage的parse是通过
None.gif BufferedReader br = new  BufferedReader( new  StringReader(raw));
None.gifaddProperty( br.readLine()); 
//  MIME-Version
None.gif
        addProperty( br.readLine());  //  Content-Type
None.gif
来获得每一行的内容,但是发现br.readline是以\r(0X0A),\n(0X0D)中的任何一个字符即认为是行结束符。
这样,在获取48字节头的时候,如果字节内容正好包括0D的时候,就会发生截取出来的头少于48个字节而引起indexbound错误。
因此,修改如下:
None.gif package rath.msnm.msg;
None.gif
None.gifimport java.io.
* ;
ExpandedBlockStart.gifContractedBlock.gif
/**/ /**
InBlock.gif * <p>Title: </p>
InBlock.gif * <p>Description: </p>
InBlock.gif * <p>Copyright: Copyright (c) 2004</p>
InBlock.gif * <p>Company: </p>
InBlock.gif * @author unascribed
InBlock.gif * @version 1.0
ExpandedBlockEnd.gif 
*/

None.gif
ExpandedBlockStart.gifContractedBlock.gif
public   class  MimeMessageBufferedReader extends BufferedReader  dot.gif {
InBlock.gif  
private String charcode;
ExpandedSubBlockStart.gifContractedSubBlock.gif  
public MimeMessageBufferedReader(Reader in,String charcode) dot.gif{
InBlock.gif    super(
in);
InBlock.gif    
this.charcode =charcode;
ExpandedSubBlockEnd.gif  }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif  
public MimeMessageBufferedReader(Reader in,int sz,String charcode) dot.gif{
InBlock.gif   super(
in,sz);
InBlock.gif   
this.charcode=charcode;
ExpandedSubBlockEnd.gif  }

InBlock.gif
InBlock.gif  
public String readLine()
InBlock.gif                throws IOException
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif    CharArrayWriter caw
=new CharArrayWriter(6);
InBlock.gif    ByteArrayOutputStream bo
=new ByteArrayOutputStream();
InBlock.gif
InBlock.gif    
int c=this.read();
InBlock.gif    
if(c==-1)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif      
return null;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
while(c!=-1)dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif      
if(c==13)dot.gif{
InBlock.gif        
int d=this.read();
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if(d==10)dot.gif{
InBlock.gif          
break;
ExpandedSubBlockEnd.gif        }
else
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{caw.write(c);
InBlock.gif         caw.write(d);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif      }
elsedot.gif{
InBlock.gif        caw.write(c);
ExpandedSubBlockEnd.gif      }

InBlock.gif
InBlock.gif      
byte[] bt=new String(caw.toCharArray()).getBytes(charcode);
InBlock.gif      bo.write(bt);
InBlock.gif      caw.reset();
InBlock.gif      c
=this.read();
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return new String(bo.toByteArray(),charcode);
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}

None.gif public   void  parse( String raw ) throws Exception
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        MimeMessageBufferedReader br 
= new MimeMessageBufferedReader(new StringReader(raw),rath.msnm.msnmConstant.getCharacterCode());
InBlock.gif
InBlock.gifdot.gif
InBlock.gif
ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/enhydraboy/archive/2004/08/02/29500.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值