首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

请问java中String和Byte转换有关问题

2012-05-05 
请教java中String和Byte转换问题Java code/*** 将字符串按字节位数截取* @param strValue 输入字符串* @pa

请教java中String和Byte转换问题

Java code
/**     * 将字符串按字节位数截取     * @param strValue 输入字符串     * @param a 截取起始位数     * @param b 截取结束位数     * @return value     * @throws java.lang.Exception     */    public String subStringByte(String strValue,int a,int b) throws Exception{        String value=null;        byte[] bytes = new byte[2048];        System.out.println(bytes.length);        bytes = strValue.getBytes();        System.out.println(bytes.length);        byte[] str = new byte[b-a];//要截取的字节码        int index = 0;        for(int i=a;i<b;i++) {            str[index++] = bytes[i] ;//获取b-a的字节码        }        value = new String(str);//转化为string        return value;    }

开始bytes长度是2048,strValue.getBytes()之后怎么变成1024了,我输入的strValue参数很长时,需要截取的参数,a或b超过1024就数组越界,求各位解释下

[解决办法]
byte[] bytes = new byte[2048];
此时bytes引用的是一个对象
bytes = strValue.getBytes();
这次bytes引用的是strValue.getBytes()返回的另一个对象。这个数组的长度跟2048是没有关系的。
[解决办法]
byte[] bytes = new byte[2048];
bytes = strValue.getBytes(); 返回是是一个新的字节数组,也就是说bytes指向的引用变了。不在指向new byte[2048];
至于strValue.getBytes();是多大的字节数组,要去翻源码了。你也可以直接打印出他的长度是多少,看看结果。


[解决办法]
我试了没问题啊。
Java code
public static void main(String[] args) throws Exception {        StringBuffer sb = new StringBuffer();        for(int i = 0;i < 9999;i++) {            sb.append("艹x");        }        System.out.println(subStringByte(sb.toString(),10,20));    }    public static String subStringByte(String strValue,int a,int b) throws Exception{        String value=null;        byte[] bytes = new byte[2048];        System.out.println(bytes.length);        bytes = strValue.getBytes();        System.out.println(bytes.length);        byte[] str = new byte[b-a];//要截取的字节码        int index = 0;        for(int i=a;i<b;i++) {            str[index++] = bytes[i] ;//获取b-a的字节码        }        value = new String(str);//转化为string        return value;    } 

热点排行