Android 图片转二进制流与二进制转字符串示例

1 下载量 61 浏览量 更新于2024-09-04 收藏 50KB PDF 举报
在Android开发中,处理图像数据通常涉及到将图片转换成二进制流和二进制数据转换成字符串。本文主要介绍了两个关键函数:`readStream` 和 `byte2hex`,它们分别用于图片文件读取和二进制数据的十六进制表示。 首先,`readStream` 方法是图片文件到二进制流转换的核心。它通过以下步骤实现: 1. 使用 `FileInputStream` 从指定路径 `imagepath` 读取图片文件。 2. 创建一个 `ByteArrayOutputStream` 对象,用于存储读取到的二进制数据。 3. 定义一个固定大小的字节数组 `buffer`,这里设置为1024字节,用于一次读取一小部分数据。 4. 使用 `fs.read(buffer)` 循环读取文件,直到读取到文件末尾,每次读取的长度存储在变量 `len` 中。 5. 在循环中,将读取到的数据写入 `ByteArrayOutputStream`,确保数据顺序不丢失。 6. 关闭输入流 `fs` 和输出流 `outStream`,然后返回转换后的二进制数组。 这个方法可用于向服务器发送二进制图片数据,或者在内存中进行进一步处理,如压缩或加密。 接着,`byte2hex` 函数用于将字节数组转换为十六进制字符串。它遍历输入的 `byte[]`,对每个字节应用 `Integer.toHexString()` 函数获取其十六进制表示,添加前导0以保持2位长度。最后,将所有十六进制字符连接成一个字符串并返回。 在实际应用中,例如在上传图片时,可能需要先对原始Bitmap进行压缩,以便减小数据量。`compressBitmap` 方法通过创建一个 `Matrix` 对象,根据Bitmap的宽高比例进行缩放,将压缩后的新Bitmap保存为字节数组,然后可以与 `readStream` 结合使用,先压缩再转换为二进制流。例如: ```java // 压缩Bitmap到3:1的大小 Bitmap compressedBitmap = compressBitmap(bitmap); byte[] compressedData = readStream(compressedBitmap); // 使用之前定义的readStream方法 // 将压缩后的数据上传到服务器 sendToServer(compressedData); ``` 总结来说,这篇文章提供了Android开发中常见的图片数据处理技术,包括文件读取、二进制数据转换以及图像压缩,这对于开发者在上传、存储和传输图片数据时非常实用。通过理解并运用这些方法,可以有效地管理应用程序中的图像资源。