大家先看下这个方法 try catch 后边final 还要 里边继续try catch 关闭流: public static byte[] obj2byte(Object obj) { if (obj == null) return null; byte[] ret = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; try { out = new ObjectOutputStream(baos); out.writeObject(obj); ret = baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); baos.close(); } catch (IOException e) { e.printStackTrace(); } }
}
我们改造下:
public static Object byte2obj(byte[] bytes) { if (bytes == null) return null; Object ret = null; ByteArrayInputStream bais = new ByteArrayInputStream(bytes); //自动关闭流 写法 try ( ObjectInputStream in = new ObjectInputStream(bais) ) { ret = in.readObject(); } catch (Exception e) { e.printStackTrace(); } return ret; }
这种事流自动关闭写法 :
具体格式就是
try
(创建流对象语句,如果多个,使用
';'
隔开) {
// 读写数据
}
catch
(IOException e) {
e.printStackTrace();
}
我们在看一个小例子: 这是salSession 不用关闭 也是自动关闭的。
try ( SqlSession sqlSession = sqlSessionFactory.openSession(); // 1 Cursor<RepaymentPlan> cursor = sqlSession.getMapper(RepaymentPlanMapper.class).scan(3, 10); ) { cursor.forEach(o -> { System.out.println(o.getOrderNo()); }); }