有没有办法使用Jackson的ObjectMapper序列化java.util.stream.Stream<T>
?
我没有提到Jackson的流媒体API,它允许您以块的形式处理JSON文档。
我也没有提到像java.io.InputStream
那样使用Java的I / O流来读取JSON文件。
我指的是JDK8引入的Java流媒体API。
我想做这样的事情:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.stream.Stream;
public final class JsonSerializer {
private final ObjectMapper objectMapper;
public JsonSerializer(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
public String serializeAsString(SimpleObjectBean bean) throws JsonProcessingException {
return objectMapper.writerFor(SimpleObjectBean.class).writeValueAsString(bean);
}
public String serializeListAsString(List<SimpleObjectBean> beans) throws JsonProcessingException {
return objectMapper.writerFor(List.class).writeValueAsString(beans);
}
// does not work
public String serializeStreamAsString(Stream<SimpleObjectBean> beanStream) throws JsonProcessingException {
return objectMapper.writerFor(Stream.class).writeValueAsString(beanStream);
}
// used as workaround. "converting" stream into iterator beforehand
public String serializeIteratorAsString(Iterator<SimpleObjectBean> beanIterator) throws JsonProcessingException {
return objectMapper.writerFor(Iterator.class).writeValueAsString(beanIterator);
}
}
我使用Jackson 2.9.5
答案 0 :(得分:1)
序列化Streams并不是一个好主意,因为Streams不是持久性的。而且它们只能遍历一次。在这种情况下,收藏将是更好的选择。 但是可以这样做:
new ObjectMapper().writerWithType(Iterator.class).writeValueAsString(stream.iterator());