Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从将位图更改为十六进制字符串提高性能_Android_Arrays_Bitmap_Hex_Fileoutputstream - Fatal编程技术网

Android 从将位图更改为十六进制字符串提高性能

Android 从将位图更改为十六进制字符串提高性能,android,arrays,bitmap,hex,fileoutputstream,Android,Arrays,Bitmap,Hex,Fileoutputstream,我正在尝试将捕获的照片(以.jpeg格式)转换为十六进制字符串,但当涉及到操作时,需要2分钟以上才能返回成功的转换。除了增加缓冲区大小外,您能告诉我如何提高性能吗?(在Android中使用) 下面是我的代码 private String changeByteToHex(byte[] a) { StringBuilder sb = new StringBuilder(); for (byte d : a) { sb.append(String.format("%02

我正在尝试将捕获的照片(以.jpeg格式)转换为十六进制字符串,但当涉及到操作时,需要2分钟以上才能返回成功的转换。除了增加缓冲区大小外,您能告诉我如何提高性能吗?(在Android中使用)

下面是我的代码

private String changeByteToHex(byte[] a) {
    StringBuilder sb = new StringBuilder();
    for (byte d : a) {
        sb.append(String.format("%02X", d));
    }
    return sb.toString();
}

public String photoEncode(File file) {
    try{

        ByteArrayInputStream inStream = retrieveByteArrayInputStream(file);
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();

        byte[] temp = new byte[8192];
        int read;

        while((read = inStream.read(temp)) >= 0){
            outStream.write(temp, 0, read);
        }

        byte[] data = outStream.toByteArray();  
        return changeByteToHex(data);
    } catch(Exception ex) {
        ex.printStackTrace();
        return null;
    }
}

我不认为有任何有效的方法可以做到这一点,但我怀疑你每次都能成功地做到这一点,而不会遇到任何内存不足的错误。但这可能会导致一个错误,我知道你为什么首先计划将照片转换为十六进制?因为捕获的照片可能是敏感内容。在上传到服务器之前,必须先将其编码为数据字节。为了防止ANR,您可以在AsyncTask中运行上述代码,但将整个图像字节转换为字节数组和字符串对象最终将导致内存不足错误。