我需要使用分隔符II *将tiff文件拆分为多个tiff文件,因此我使用下面的代码将tiff文件转换为base64并使用子字符串提取第一个图像。但是我收到的错误如下。请告知如何使用此分隔符II *(base64代码为SUkq)从tiff文件中仅提取第一个图像。
我能够在不执行子字符串的情况下解码到图像。
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1954)
at EncodeStringTest.main(EncodeStringTest.java:63)
班级档案
public class EncodeStringTest {
public static void main(String[] args) {
File file = new File("D:\\Users\\Vinoth\\workspace\\image.tif");
try {
/*
* Reading a Image file from file system
*/
FileInputStream imageInFile = new FileInputStream(file);
byte imageData[] = new byte[(int)file.length()];
imageInFile.read(imageData);
/*
* Converting Image byte array into Base64 String
*/
String imageDataString = encodeImage(imageData);
System.out.println(imageDataString);
String result = imageDataString.substring(imageDataString.indexOf("SUkq") + 1, imageDataString.indexOf("SUkq"));
/*
* Converting a Base64 String into Image byte array
*/
System.out.println("Resulted String"+imageDataString);
byte[] imageByteArray = decodeImage(result);
/*
* Write a image byte array into file system
*/
FileOutputStream imageOutFile =
new FileOutputStream("D:\\Users\\Vinoth\\workspace\\image_2.tif");
imageOutFile.write(imageByteArray);
imageInFile.close();
imageOutFile.close();
System.out.println("Image Successfully Manipulated!");
} catch (FileNotFoundException e) {
System.out.println("Image not found" + e);
} catch (IOException ioe) {
System.out.println("Exception while reading the Image " + ioe);
}
}
public static String encodeImage(byte[] imageByteArray){
return Base64.encodeBase64URLSafeString(imageByteArray);
}
public static byte[] decodeImage(String imageDataString) {
return Base64.decodeBase64(imageDataString);
}
}
答案 0 :(得分:0)
在此代码中
substring(imageDataString.indexOf("SUkq") + 1, imageDataString.indexOf("SUkq"))
根据错误消息很清楚,在输入中找不到字符串"SUkq"
。因此,此陈述等同于
substring(0,-1)
哪个无效。您需要添加代码来处理输入不包含您要查找的文本的情况。
其次,该子串永远不会起作用。由于你两次都开始indexOf
字符串的开头,即使输入包含你要查找的字符串,结果也总是
substring(n,n-1)
其中n
是目标字符串的位置。此范围始终无效。
目前尚不清楚为什么你认为有必要对图像进行base64编码。只需搜索字节数组即可。仅当未编码的目标字符串从文件开头的3倍偏移处开始时,base64字符串才包含SUkq
字符串,因为base64将3个输入字节编码为4个输出字节。如果输入中的分隔符II*
出现在另外两个可能的偏移量(模3)中,则编码结果将取决于先前和后续数据,因此除非可以,否则使用base64将无法正常工作保证所有情况下输入分隔符的偏移量,它总是0 mod 3.
哦,下次尝试逐步调试IDE调试器中的代码。你很快就会看到发生了什么。