yfddht1573 2009-08-20 16:16
浏览 219
已采纳

求一个高效的算法!!

现在有一个byte[]数组长度已经90594

代码如下:

[code="java"]
public static String Bytes2HexString(byte[] b) {
String ret = "";
System.out.println(currentTime());
String hex = "";
for (int i = 0; i < b.length; i++) {
hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
//ret.append(hex.toUpperCase());
ret += hex.toUpperCase();
}
System.out.println(currentTime());
return ret;
}
[/code]
执行后:
2009-08-20 16:09:30
2009-08-20 16:10:13
竟然用了这么长时间。。

现在只能想到用把byte[]分成N个小的byte[]用多线程去转,不知道还没有更优的算法。。

[b]问题补充:[/b]
这个问题已经解决,

还是小弟对java不怎么熟悉啊。
[code="java"]
public static String Bytes2HexString(byte[] b) {

StringBuffer ret = "";

System.out.println(currentTime());

String hex = "";

for (int i = 0; i < b.length; i++) {

hex = Integer.toHexString(b[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

ret.append(hex.toUpperCase());

//ret += hex.toUpperCase();

}

System.out.println(currentTime());

return ret.toString();

}

[/code]

答案还是PHPRPC群里朋友给出的,,感谢

  • 写回答

2条回答 默认 最新

  • walsh_bupt 2009-08-20 16:46
    关注

    [b][color=red]ret += hex.toUpperCase(); [/color][/b]

    不知道楼主知道不,上面这句话执行时创建了多少个String对象。时间就是花费在这上面的。

    完整代码如下:
    [code="java"]import java.text.SimpleDateFormat;
    import java.util.Date;

    public class Test {
    public static String Bytes2HexString(byte[] b) {
    System.out.println(currentTime());
    long startTime = System.currentTimeMillis();
    StringBuilder result = new StringBuilder();
    String str = "";
    for (int i = 0; i < b.length; i++) {
    str = Integer.toHexString(b[i] & 0xFF);
    if (str.length() == 1) {
    str = '0' + str;
    }
    result.append(str.toUpperCase());
    }
    System.out.println(currentTime());
    System.out.println("执行用的毫秒数:"
    + (System.currentTimeMillis() - startTime));
    return result.toString();
    }

    public static String currentTime() {
        Date time = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String result = format.format(time);
        return result;
    }
    
    public static void main(String[] args) {
        byte[] by = new byte[90594];
        Bytes2HexString(by);
    }
    

    }[/code]

    执行结果:
    2009-08-20 04:45:24
    2009-08-20 04:45:24
    执行用的毫秒数:109
    [color=red]
    数组同样大,但是时间才109毫秒,只有0.1秒多一点。[/color]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题