如何使用函数 "getAttribute" 从 Android 中带有 exif 的图像中提取字节数组?
How to use function "getAttribute" to extract byte array from img with exif in Android?
我是 JAVA 编程的新手。
而且我想用android.media.ExifInterface来保存和恢复一些字节数组作为exif信息。
String str = new String(byteArray);//save
exif.setAttribute(ExifInterface.TAG_MAKER_NOTE, str);
exif.saveAttributes();
String str =exif.getAttribute(ExifInterface.TAG_MAKER_NOTE);//restore
if(str != null)
{
byte[] byteArray = str.getBytes();
}
首先,我使用 String(byte[])
将 byte[]
转换为字符串。
然后我使用函数 setAttribute(String tag, String value)
来保存带有标签 TAG_MAKER_NOTE 的字符串。
当我想提取字节数组时,我会使用 getAttribute(String tag)
来获取相应的字符串。
但是我发现如果保存的字节数组如下所示,函数getAttribute(String tag)
将无法正常工作:
byte[] byteArray = new byte[]{ 1,2,3,4,0,0,5,6};
返回的字符串只包含{1,2,3,4}
。 0之后的数据丢失。字符串长度为4,而保存的字符串是正常的。也许字符串以 0 为结尾?
而且我想知道是否有任何解决方案可以提取整个字节数组?没有第三个图书馆更好。
不使用 new String(byteArray)
转换为字符串,而是使用 base64 编码的字符串。代码如下所示:
byte[] byteArray = new byte[]{1, 2, 3, 4, 0, 0, 5, 6};
String str = Base64.getEncoder().encodeToString(byteArray);
System.out.println(str);
byte[] result = Base64.getDecoder().decode(str);
System.out.println(Arrays.toString(result));
我是 JAVA 编程的新手。
而且我想用android.media.ExifInterface来保存和恢复一些字节数组作为exif信息。
String str = new String(byteArray);//save
exif.setAttribute(ExifInterface.TAG_MAKER_NOTE, str);
exif.saveAttributes();
String str =exif.getAttribute(ExifInterface.TAG_MAKER_NOTE);//restore
if(str != null)
{
byte[] byteArray = str.getBytes();
}
首先,我使用 String(byte[])
将 byte[]
转换为字符串。
然后我使用函数 setAttribute(String tag, String value)
来保存带有标签 TAG_MAKER_NOTE 的字符串。
当我想提取字节数组时,我会使用 getAttribute(String tag)
来获取相应的字符串。
但是我发现如果保存的字节数组如下所示,函数getAttribute(String tag)
将无法正常工作:
byte[] byteArray = new byte[]{ 1,2,3,4,0,0,5,6};
返回的字符串只包含{1,2,3,4}
。 0之后的数据丢失。字符串长度为4,而保存的字符串是正常的。也许字符串以 0 为结尾?
而且我想知道是否有任何解决方案可以提取整个字节数组?没有第三个图书馆更好。
不使用 new String(byteArray)
转换为字符串,而是使用 base64 编码的字符串。代码如下所示:
byte[] byteArray = new byte[]{1, 2, 3, 4, 0, 0, 5, 6};
String str = Base64.getEncoder().encodeToString(byteArray);
System.out.println(str);
byte[] result = Base64.getDecoder().decode(str);
System.out.println(Arrays.toString(result));