繁体   English   中英

将文件中包含的字节值读入字节数组

[英]Read byte values contained in file into byte array

如果我有一个包含我想要的确切byte[]数据的文件:

[-119, 45, 67, ...]

如何将这些值读入byte数组? 我是否必须将它们作为String读取,然后将这些String值转换为byte值?

这就是我目前正在做的事情,它有效,但很慢:

BufferedReader reader = null;
    String mLine = null;
    AssetManager assetManager = CustomApplication.getCustomAppContext().getAssets();

    try {
        reader = new BufferedReader(new InputStreamReader(assetManager.open(fileName)));
        mLine = reader.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    String[] byteValues = mLine.substring(1, mLine.length() - 1).split(",");
    byte[] imageBytes = new byte[byteValues.length];

    for (int i = 0; i < imageBytes.length; i++) {
        imageBytes[i] = Byte.valueOf(byteValues[i].trim());
    }

    return imageBytes;

更新:似乎对我想要完成的事情存在误解。 我的文件包含我在最后一个字节数组中想要的EXACT字节数据。 例如,我想要完全转换文件

[-119, 45, 67, ...]

到一个byte[]调用结果

result[0] = -119
result[1] = 45
result[2] = 67

BufferedReader用于读取char单位。 使用BufferedInputStream读取byte单位并使用ByteArrayOutputStream来帮助填充字节数组:

BufferedInputStream bis = new BufferedInputStream(assetManager.open(fileName));
ByteArrayOutputStream buffer = new ByteArrayOutputStream();

int theByte;

while((theByte = bis.read()) != -1)
{
    buffer.write(theByte);
}

bis.close();
buffer.close();

byte[] result = buffer.toByteArray();

更快版本的Eng.Fouad代码:

BufferedInputStream bis = new BufferedInputStream(assetManager.open(fileName));
ByteArrayOutputStream buffer = new ByteArrayOutputStream();

int size;
byte[] buffer = new byte[4096];

while((size = bis.read(buffer)) != -1) {
    buffer.write(buffer, 0, size);
}

bis.close();
buffer.close();

byte[] result = buffer.toByteArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM