本帖最后由 li674688017 于 2012-08-14 11:24:48 编辑

解决方案 »

  1.   


    可能上面的例子不正确,其实我是在MappedByteBuffer里面取,不是String
      

  2.   

    MappedByteBuffer mMbBuf = new RandomAccessFile(file, "r").getChannel().map(FileChannel.MapMode.READ_ONLY, 0, 100);byte[] buf = new byte[10];
    int i = 3;
    for (j = i; j < 10 + i; j++) {
    buf[j - i] = mMbBuf.get(j);
    }
    String s = new String(buf, "GBK");
    System.out.println("----->" + s);
    大致这样~~ 
      

  3.   

    判断下byte 一个个取,别切到半个汉字就好了吧?
      

  4.   

    试试这个,我没怎么测试,你最好多测测        for (j = i; j < 10 + i; j++) {
                if(mMbBuf.get(j)<-30){
                    i++;
                }
                buf[j - i] = mMbBuf.get(j);
            }
      

  5.   

    上面的不对,改成:while(mMbBuf.get(i)<-30){
        i++;
    }
    //这时候得到的i应该就是汉子的第一个字节码,一般来说汉子的第一个字节码大于-30,而后两个小于-30
    //这不是官方资料,是我观察的结果,所以你要多测试
      

  6.   

    很简单的呀 如果是乱码 byte值是负数
      

  7.   

    byte<=127 +1
    else +2这样不会切到半个了吧?
      

  8.   

    while(mMbBuf.get(i)<-30){
        i++;
    }
    //这时候得到的i应该就是汉子的第一个字节码,一般来说汉子的第一个字节码大于-30,而后两个小于-30
    //这不是官方资料,是我观察的结果,所以你要多测试
      

  9.   

    public class Test { public static void main(String[] args) {


    }

    /**
     * 
     * @param str 要截取的字符
     * @param bytelength  截取的字节长度
     * @return
     */
    public static String CutString(String str,int bytelength){

    String tmp = str.substring(0,6);
    while(tmp.getBytes().length>bytelength){
    tmp = tmp.substring(0,tmp.length()-1);
    }
    return tmp;
    }
    }