我有一个java.io.Reader作为我方法的返回类型。但我有从数据库中获取的实例的对象类型。那么如何将其转换为Reader类型并返回?
我有以下代码,其中getByteArrayObject()返回一个字节数组。和我需要返回相同,但返回类型是Reader,我无法改变。
public Reader getMediaReader(String arg0) {
// TODO Auto-generated method stub
Object obj = getByteArrayObject();
System.out.println("HELLO I AM DETCTED....... in getMediaReader");
return null;
}
需要帮助 感谢。
答案 0 :(得分:3)
根据您编辑过的问题......
假设getByteArrayObject()
返回的字节数组是以某些已知字符集/编码进行文本编码的,那么以下内容就足够了:
public Reader getMediaReader(String arg0) throws IOException {
byte[] bytes = getByteArrayObject();
return new InputStreamReader(
new ByteArrayInputStream(bytes), ENCODING_NAME);
}
其中ENCODING_NAME
是编码的名称。
编辑 - 我猜测arg0
参数应该包含编码名称。
答案 1 :(得分:2)
调用者如何期望读取数据?他们期待得到什么?
听起来你可能希望序列化为某种基于文本的格式(JSON?XML?),然后返回一个StringReader
,让客户端读取该数据。但它实际上取决于客户端期望的内容......您可能需要编写一个类似的方法来根据该文本数据创建对象的新实例。
当你考虑序列化时,值得考虑版本化 - 一旦你掌握了你想要做的基础知识,想想如果你在课堂上添加一个字段会发生什么。你将如何阅读旧数据?旧代码对新数据的作用是什么?你需要如何向后和向前兼容?
答案 2 :(得分:1)
首先,我想澄清一下,java中没有将一个对象自动转换为另一个对象的概念。 你从DB得到什么样的对象?它本身是读者对象的序列化版本,然后在反序列化时你应该找回读者对象。 如果你想从对象中的内容构造一个reader对象,假设你有一个想要读取的字符串数据,你需要创建一个StringReader并将其返回,因为它扩展了reader。
Java中的Reader类表示字符流层次结构。