如何使用函数 "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));