我已经将一些二进制图像数据写到了hadoop序列文件中,如果可能的话,我想在hadoop之外使用java将其写成png。
[编辑]数据流概述:输入文件→ 从输入生成BuffereImage→ 将BuffereImage转换为二进制数组→ 在hdfs中存储为sequencefile→ 尝试将sequencefile从hdfs中取出并将其转换为png。
但是,我不确定如何定位sequencefile中数据的起始位置。根据我对sequencefile文档的了解,我可以使用sync标记来定位sequencefile头的结尾,然后使用记录长度和键长度信息来查找值的开头。
但是,我不确定如何找到同步标记的位置。如何找到头的元数据的停止位置以及同步标记的开始和结束位置?我可以计算同步标记的值并用这种方法查找吗?另外,我如何找出记录长度和密钥长度占用的字节数?
如果有其他方法可以找到sequencefile值,请告诉我。如果有帮助的话,下面是我用来写序列文件的一些代码。
baos = new ByteArrayOutputStream();
ImageIO.write(img, "png", baos); //img is a BufferedImage
byte[] imBytes = baos.toByteArray();
baos.write(imBytes);
writer = SequenceFile.createWriter(conf, writer.file(new Path(imgPath)), writer.keyClass(Text.class),writer.valueClass(BytesWritable.class));
writer.append(new Text(imgPath), new BytesWritable(imBytes));
实际上,我获取了程序生成的BuffereImage,将其作为png写入字节数组,然后将其写入sequencefile。
[编辑]我浏览了sequencefile源代码,有一个函数叫做 getSync()
? 我想这是私人的,所以我不知道该怎么用。
暂无答案!
目前还没有任何答案,快来回答吧!