import org.apache.commons.lang.SerializationUtils;
/**
* testSerializeAndDeserialize.
*
**/
public void testSerializeAndDeserialize throws Exception {
//serialize here
byte[] bytes = SerializationUtils.serialize("your object here which is of type f .pdf, .doc and .txt ");
// deserialize the same here and see you are getting back or not.
yourobjecttype objtypeofpdfortxtordoc = (yourobjecttype) SerializationUtils.deserialize(bytes);
}
注意:apachecommons lang的jar在hadoop集群中始终可用(不是外部依赖)
另一个例子:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.commons.lang.SerializationUtils;
public class SerializationUtilsTrial {
public static void main(String[] args) {
try {
// File to serialize object to
String fileName = "testSerialization.ser";
// New file output stream for the file
FileOutputStream fos = new FileOutputStream(fileName);
// Serialize String
SerializationUtils.serialize("SERIALIZE THIS", fos);
fos.close();
// Open FileInputStream to the file
FileInputStream fis = new FileInputStream(fileName);
// Deserialize and cast into String
String ser = (String) SerializationUtils.deserialize(fis);
System.out.println(ser);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Put (or insert) a row
*/
@Override
public void addRecord(final String tableName, final String rowKey, final String family, final String qualifier,
final byte[] yourcolumnasBytearray) throws Exception {
try {
final HTableInterface table = HBaseConnection.getHTable(getTable(tableName));
final Put put = new Put(Bytes.toBytes(rowKey));
put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), yourcolumnasBytearray);
table.put(put);
LOG.info("INSERT record " + rowKey + " to table " + tableName + " OK.");
} catch (final IOException e) {
printstackTrace(e);
}
1条答案
按热度按时间bbuxkriu1#
首先,我不知道maprdb,因为我使用cloudera。但我有在hbase中以字节数组的形式存储多种类型对象的经验,如下所述。
在hbase或任何其他数据库中存储数据的最基本方式是字节数组。看看我的答案
您可以使用ApacheCommonsLangAPI以下面的方式实现这一点。可能这是最好的选择,它将适用于所有对象,包括图像/音频/视频等。。
请使用任何文件的对象类型之一测试此方法。
SerializationUtils.serialize
将返回字节。你可以插入。注意:apachecommons lang的jar在hadoop集群中始终可用(不是外部依赖)
另一个例子:
如果你不想使用
SerializationUtils
类,然后您可以看到下面的pdf序列化和反序列化示例,以便更好地理解它,但如果您使用SerializationUtils
代码将减少。上面是字节数组,您可以准备put请求上传到数据库,即hbase或任何其他数据库
一旦你坚持,你可以得到相同的使用hbase获取或扫描你得到你的pdf字节,并使用下面的代码再次使相同的文件,即somefile.pdf在这种情况下。
编辑:既然你问了hbase的例子,我就加上这个。。在下面的方法中
yourcolumnasBytearray
是您的文档文件,例如pdf。。转换为字节数组(使用SerializationUtils.serialize
)在上面的例子中。。。