如何将输入流转换为java对象

如何将输入流转换为java对象,java,Java,此代码将Java对象转换为输入流,如何将输入流转换为对象?我需要将我的对象转换为输入流,然后我传递它,我想把我的对象取回。在try块中,你应该写: ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(reg_be); oos.flush(); oos.close(); InputStream

此代码将Java
对象
转换为
输入流
,如何将
输入流
转换为
对象
?我需要将我的
对象
转换为
输入流
,然后我传递它,我想把我的
对象
取回。

try
块中,你应该写:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(reg_be);
oos.flush();
oos.close();

InputStream is = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream
是用另一个流初始化的,例如
BufferedInputStream
或您的输入流

请尝试以下操作

ObjectInputStream ois = new ObjectInputStream(is);
Object object = ois.readObject();
ObjectInputStream ois = new ObjectInputStream(is);
Object object = ois.readObject();
正如@darijan所提到的,他工作得很好。 但我们同样需要对代码执行try、catch块,对于空白输入流,它将给出与EOF(文件结尾)相关的错误

所以,我把它转换成一个字符串。然后,如果字符串不是空的或null,那么只有我使用ObjectMapper将其转换为Object

虽然这不是一种有效的方法,但我不需要担心try-catch,null处理也在字符串中完成,而不是在输入流中完成

ObjectInputStream ois = new ObjectInputStream(is);
Object object = ois.readObject();
String responsest=IOUtils.toString(is,StandardCharsets.UTF_8.name());
Object=null;
//不是空字符串或空白字符串
if(StringUtils.isNotBlank(响应)){
对象=getJsonFromString(响应);
}
//以下代码已在项目中使用(Util类)
私有对象getJsonFromString(字符串jsonStr){
if(StringUtils.isEmpty(jsonStr)){
返回新的LinkedHashMap();
}
ObjectMapper ObjectMapper=getObjectMapper();
Map obj=null;
试一试{
obj=objectMapper.readValue(jsonStr,newTypeReference(){
});
}捕获(IOE异常){
LOGGER.error(“无法解析JSON:{}”,e)
}
返回obj;
}
私有对象映射器getObjectMapper(){
ObjectMapper ObjectMapper=新的ObjectMapper();
objectMapper.configure(在未知属性上反序列化feature.FAIL,false);
enable(反序列化功能。接受\u空\u字符串\u作为\u空\u对象);
返回对象映射器;
}

ObjectInputStream似乎非常明显。ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream oos=新的ObjectOutputStream(BAS);oos.writeObject(reg_be);oos.flush();oos.close();InputStream is=newbytearrayinputstream(baos.toByteArray());此代码显示异常java.io.NotSerializableException:为什么?因为您的类未
实现Serializable
;ObjectOutputStream oos=新的ObjectOutputStream(BAS);oos.writeObject(reg_be);oos.flush();oos.close();InputStream is=newbytearrayinputstream(baos.toByteArray());此代码显示异常java.io.NotSerializableException:为什么?因为您正在序列化/反序列化的对象类(
reg_be
)必须实现
Serializable
interface.ByteArrayOutputStream BAS=new ByteArrayOutputStream();ObjectOutputStream oos=新的ObjectOutputStream(BAS);oos.writeObject(reg_be);oos.flush();oos.close();InputStream is=newbytearrayinputstream(baos.toByteArray());这段代码显示了异常java.io.NotSerializableException:为什么?为什么发布与前两个完全相同的答案?类是否实现了Serializable?应该是这样的,否则你会得到那个例外。在I/O流中传输其对象的类。@darijan没有看到前两个。好的,我必须序列化我的对象。。。好的,我会的。谢谢你的帮助
ObjectInputStream ois = new ObjectInputStream(is);
Object object = ois.readObject();
String responseStr = IOUtils.toString(is, StandardCharsets.UTF_8.name());
Object object = null;
// is not null or whitespace consisted string
if (StringUtils.isNotBlank(response)) {
    object = getJsonFromString(response);
}


// below codes are already used in project (Util classes)
private Object getJsonFromString(String jsonStr) {
    if (StringUtils.isEmpty(jsonStr)) {
        return new LinkedHashMap<>();
    }
    ObjectMapper objectMapper = getObjectMapper();

    Map<Object, Object> obj = null;
    try {
        obj = objectMapper.readValue(jsonStr, new TypeReference<Map<Object, Object>>() {
        });
    } catch (IOException e) {
        LOGGER.error("Unable to parse JSON : {}",e)
    }
    return obj;
}
private ObjectMapper getObjectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
    return objectMapper;
}