to takecare(大厅) 对,我也就是这个思路,读记录时还要注意判断文件是否结束! 但是还要注意的是记录的繁体中文不能被破坏掉,原来用RandomAccessFile一行行读的话,不仅慢,而且会把繁体中文给破坏! 多谢
我想到这里,你可以跟我一起写,呵呵。 BufferedReader bfReader = new BufferedReader( new BufferedInputStream( new BufferedInputStream( new FileInputStream(afileB001) ) ) ); static final String staticString = "<tblArticleBasic>"; String oneLine; StringBuffer oneNode = new StringBuffer(); while ((oneLine = bfReader.readLine()) != null) { oneLine = new String(oneLine.getBytes(),"Big5"); if (oneLine.indexOf(staticString) != -1) { oneNode.append(oneLine); } else {
} }
试试这个行不行?我不知道你的解释器是不是针对每个节点解释的。如果不是的话,可能你要改写接口了。BufferedReader bfReader = new BufferedReader( new BufferedInputStream( new BufferedInputStream( new FileInputStream(afileB001) ) ) ); static final String staticString = "<tblArticleBasic>"; String oneLine; StringBuffer oneNode = new StringBuffer(); int flag = 0; //flag for new node begins while ((oneLine = bfReader.readLine()) != null) { oneLine = new String(oneLine.getBytes(),"Big5"); if (oneLine.indexOf(staticString) >= 0) { if (flag == 0) { //one node begins flag = 1; }
if (flag == 1) { flag == 0; //one node ready, call your node dispose methods here ......
//after dispose methods, please free all data oneNode.delete(0, oneNode.length()); //delete all former data } } oneNode.append(oneLine); //append this string to the node }
<tblArticleBasic>
|A01.4003|BOOK|Book|A1|坝叭びキの钞|00|獶絪胯籹|EA|each|CM|Centimeter|0|0|0|G|Gram|0|0||0|
<tblArticleDesc>
|A01.4003|EN|璣粂|常カ痜產畑崩猭竑粂魁紇盿舶|常カ痜產畑崩猭竑粂魁紇盿舶|
|A01.4003|ZF|いゅ(羉)|常カ痜產畑崩猭竑粂魁紇盿舶|常カ痜產畑崩猭竑粂魁紇盿舶|
<tblArticleBarCode>
|A01.4003|2200001370005|1|
|A01.4003|2100000008049|0|
<tblArticleMerhCat>
|A01.4003|A150514|竒マ||||||1|
<tblArticleBook>
|A01.4003|A01.4003|||||01000101 000000|0|||0|0|||||0|||
<tblBookAuthor>
|A01.4003|A104010|纒糷洛ネボ絛|
<tblBookPublisher>
|A01.4003|P005908|坝叭繻(翠)Τそ|
<tblArticlePrice>
|A01.4003|HKD|Hong Kong Dollar|260|<tblArticleBasic>
|2100000009305|BOOK|Book|E||00|獶絪胯籹|EA|each|CM|Centimeter|130|187|0|G|Gram|245|245||0|
<tblArticleDesc>
|2100000009305|EN|璣粂|ネ㏑灸秈-厩拜產獵ぶ|ネ㏑灸秈-厩拜產獵ぶ|
|2100000009305|ZF|いゅ(羉)|ネ㏑灸秈-厩拜產獵ぶ|ネ㏑灸秈-厩拜產獵ぶ|
<tblArticleBarCode>
|2100000009305|2100000009305|1|
<tblArticleMerhCat>
|2100000009305|A050899|ゅての厩砃肚癘||||||1|
<tblArticleBook>
|2100000009305||丁翺(81)|ZF|いゅ(羉)||19980225 000000|2|07|32秨|255|7|05|キ|||0|||
<tblBookEditor>
|2100000009305|E017368|糂|
|2100000009305|E005323|蚿|
<tblBookPublisher>
|2100000009305|P005671|厨ゅて穨Τそ|
<tblArticlePrice>
|2100000009305|HKD|Hong Kong Dollar|40|<tblArticleBasic>
|2100000009558|BOOK|Book|D|翠|00|獶絪胯籹|EA|each|CM|Centimeter|135|208|0|G|Gram|175|175||0|
<tblArticleDesc>
|2100000009558|EN|璣粂|洛励描|洛励描|
|2100000009558|ZF|いゅ(羉)|洛励描|洛励描|
<tblArticleBarCode>
|2100000009558|2100000009558|1|
<tblArticleMerhCat>
|2100000009558|A150605|羬洛厩||||||1|
<tblArticleBook>
|2100000009558||匡拒翺|ZF|いゅ(羉)||01000101 000000|1|08|32秨|142|1|05|キ|||0|||
<tblBookPublisher>
|2100000009558|P005709|禣〆穦|
<tblArticlePrice>
|2100000009558|HKD|Hong Kong Dollar|38|<tblArticleBasic>
|2100000010387|BOOK|Book|D|翠|00|獶絪胯籹|EA|each|CM|Centimeter|129|187|0|G|Gram|440|440||0|
<tblArticleDesc>
|2100000010387|EN|璣粂|碊碊|碊碊|
|2100000010387|ZF|いゅ(羉)|碊碊|碊碊|
<tblArticleBarCode>
|2100000010387|2100000010387|1|
<tblArticleMerhCat>
|2100000010387|A030306|い瓣砰ゅ厩||||||1|
<tblArticleBook>
|2100000010387||瞊‵场Ρぇ|ZF|いゅ(羉)||19941001 000000|3|07|32秨|484|1|05|キ|||0|||
<tblBookAuthor>
|2100000010387|A078412|畗硉|
<tblBookPublisher>
|2100000010387|P006738|讽ゅ美|
<tblArticlePrice>
|2100000010387|HKD|Hong Kong Dollar|50|
不是内存泄漏,是内存不够,呵呵,我的代码消耗内存太多了当时测试的时候用的是小数据,现在太多数据就不行了
读到<tblArticleBasic>后,就不停的请求新的数据,直到读到下一个<tblArticleBasic>。
而且使用BufferedReader 而不是 BufferedInputStream。过会儿我再给你写个模板程序吧。
对,我也就是这个思路,读记录时还要注意判断文件是否结束!
但是还要注意的是记录的繁体中文不能被破坏掉,原来用RandomAccessFile一行行读的话,不仅慢,而且会把繁体中文给破坏! 多谢
BufferedReader bfReader = new BufferedReader(
new BufferedInputStream(
new BufferedInputStream(
new FileInputStream(afileB001)
)
)
);
static final String staticString = "<tblArticleBasic>";
String oneLine;
StringBuffer oneNode = new StringBuffer();
while ((oneLine = bfReader.readLine()) != null) {
oneLine = new String(oneLine.getBytes(),"Big5");
if (oneLine.indexOf(staticString) != -1) {
oneNode.append(oneLine);
} else {
}
}
new BufferedInputStream(
new BufferedInputStream(
new FileInputStream(afileB001)
)
)
);
static final String staticString = "<tblArticleBasic>";
String oneLine;
StringBuffer oneNode = new StringBuffer();
int flag = 0; //flag for new node begins
while ((oneLine = bfReader.readLine()) != null) {
oneLine = new String(oneLine.getBytes(),"Big5");
if (oneLine.indexOf(staticString) >= 0) {
if (flag == 0) {
//one node begins
flag = 1;
}
if (flag == 1) {
flag == 0;
//one node ready, call your node dispose methods here
......
//after dispose methods, please free all data
oneNode.delete(0, oneNode.length()); //delete all former data
}
}
oneNode.append(oneLine); //append this string to the node
}