« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
Seeking somebody... |
Blog信息 |
blog名称:竹,劲竹;刀,快刀 日志总数:17 评论数量:26 留言数量:0 访问次数:205248 建立时间:2005年6月8日 |

| |
[工作·学习]DB2 CLOB及Invalid XML character 软件技术
竹刀 发表于 2006/2/15 18:21:14 |
嗯,在师兄的指导下,修正了DB2读写大字段的乱码问题。使用CharacterStream代替AsciiStream + Encoding。
之后因为xml文档转换的时候经常报An invalid XML character (Unicode: 0xb)错误。决定在转换前将某些无效字符过滤掉。很自然想到了FilterInputStream,简单override read()方法,把无效字符滤掉就可以了。
public int read() throws IOException { int b = super.read();
while(0xb == b){
b = super.read();
}
return b; }
但是,很快redbar告诉我,这个invalid character还存在!怎么?没有过滤掉?!Debug一下,发现竟程序在读这个InputStream的时候,走的是read(byte[],int,int)。
:(
最后,对正确无误的实现高效的read(byte[],int,int)还是比较缺乏信心,直接oerrivde InputStream.read()先用上了。简单的测试了一下,比没有过滤字符时,慢了700-800ms左右,在可以接受的范围内,再找机会调整下吧。
另外,现在把小于0x20,不等于0xA,0xD,0x9的字符都当作无效的滤掉了。还没有弄清楚除了那个0xb外,还会不会有其它的无效字符?如果能够减少判断,效率应该会有些许的提升吧。
发现自己对java.io还不是那么理解与熟悉,需要再好好看看书了。 |
|
|