在查看项目代码中发现,同事写的spring 接收activeMQ信息中的一段代码:
spring 配置片段:
<bean id="topicListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<constructor-arg ref="topicConsumer" />
<!-- 指定消费消息的方法 -->
<property name="defaultListenerMethod" value="receive" />
<!-- custom MessageConverter define -->
<property name="messageConverter" ref="defaultMessageConverter" />
</bean>
defaultMessageConverter 重写了messageConverter接口,spring 默认的是:
org.springframework.jms.support.converter.SimpleMessageConverter
messageConverter,片段:
fromMessage方法,接受信息根据收到的message类型来进行处理:
// POJO must implements Seralizable
ByteArrayInputStream bis = new ByteArrayInputStream(map.get("POJO"));
ObjectInputStream ois = new ObjectInputStream(bis);
Object returnObject = ois.readObject();
return returnObject;
发现IO操作没有关闭动作。
查api发现:ByteArrayInputStream 关闭 ByteArrayInputStream 无效
ObjectInputStream 关闭输入流。必须调用此方法才能释放与流相关的所有资源。
结论:1.ByteArrayInputStream 、ByteArrayOutputStream不用关闭。
2. ObjectInputStream 、ObjectOutputStream需要关闭。
3.网上粘贴的代码要仔细检查。