>byte[] byB001 = new byte[new Long(afileB001.length()).intValue()];
可怕!
同意bdsc!

解决方案 »

  1.   

    while (read(byte[] b, int off, int len) != -1) {    //read, read, read}
      

  2.   

    to  takecare(大厅)   因为每条记录长度不等,所以我没办法得到off,len,它们都是不固定的,特别是len  记录文件内容如下:
    <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|
      

  3.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=1270666
      

  4.   

    to  Patrick_DK:
      不是内存泄漏,是内存不够,呵呵,我的代码消耗内存太多了当时测试的时候用的是小数据,现在太多数据就不行了
      

  5.   

    文件有固定格式的吧,写个filter处理处理
      

  6.   

    基本思想是:
    读到<tblArticleBasic>后,就不停的请求新的数据,直到读到下一个<tblArticleBasic>。
    而且使用BufferedReader 而不是 BufferedInputStream。过会儿我再给你写个模板程序吧。
      

  7.   

    to takecare(大厅)
      对,我也就是这个思路,读记录时还要注意判断文件是否结束!
      但是还要注意的是记录的繁体中文不能被破坏掉,原来用RandomAccessFile一行行读的话,不仅慢,而且会把繁体中文给破坏!  多谢
      

  8.   

    我想到这里,你可以跟我一起写,呵呵。
    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 {

    }
    }
      

  9.   

    试试这个行不行?我不知道你的解释器是不是针对每个节点解释的。如果不是的话,可能你要改写接口了。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
    }