我需要读取文件,提取字节并添加<segment></segment>
标记。然后我必须提取字节并提取<segment>
标签之间的内容。最后,标签数据将用于制作原始图像的精确副本......但我的问题是图像看起来不像原始图像。
使用文本文件可以正常工作但不能使用图像。
这是我的java代码。很简单:
public class MyFile {
public static void main(String[] args) {
try{
/* Read File */
File aFile= new File("infinito.jpg");
FileInputStream fis = new FileInputStream(aFile);
long sizeFichero = aFile.length();
byte []datos = new byte[(int) sizeFichero];
fis.read(datos);
fis.close();
/* Write copy file */
File copyFile = new File("infinto_COPY.jpg");
FileOutputStream fos = new FileOutputStream(copyFile);
/* Add bytes to array bytes */
ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
outputStream.write("<segment>".getBytes());
outputStream.write(datos);
outputStream.write("</segment>".getBytes());
byte [] bytes = outputStream.toByteArray();
/* Regular Expression */
String text = new String(bytes);
String regexpr = "<segment>(.*?)</segment>";
Pattern pat = Pattern.compile(regexpr, Pattern.MULTILINE | Pattern.DOTALL);
Matcher mat = pat.matcher(text);
/* If find between <segment></segment> then write file */
if (mat.find()){
String group1 = mat.group(1);
fos.write(group1.getBytes());
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果。原件和副本:
我怎么能通过分析正则表达式来做到这一点?
非常感谢。
答案 0 :(得分:2)
我同意@ madhav-turangi的建议。我在Java 7上尝试了您的代码,并使用Apache Commons Codec library对二进制数据进行base64编码/解码。
要使代码生效,请在导入列表中添加:
import org.apache.commons.codec.binary.Base64;
更改行:
outputStream.write(datos);
使用:
outputStream.write(Base64.encodeBase64(datos));
然后改变你的行:
fos.write(group1.getBytes());
使用:
fos.write(Base64.decodeBase64(group1.getBytes()));
以上作品经过测试。