3月7日工作内容
Last Update:
3月7日工作内容
Java复习
新发现:字符输出流及字符缓冲输出流没关闭可能会出现数据未刷新
输出文件的时候如果没有自行调用bufferedWriter.flush()
或者bufferedWriter.close()
,可能会出现文件内容没有写入的情况。
1 |
|
序列化与反序列化
ObjectIn(Out)putStream
是序列化操作流的类,用来将Java对象持久化存储在计算机。
ObjectOutputStream的Demo,写入对象的过程称为序列化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29public class ObjectDemo1 {
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList<>();
strings.add("I'am Linezepore.");
strings.add("I come from China.");
strings.add("I love coding.");
FileOutputStream fileOutputStream = null;
ObjectOutputStream objectOutputStream = null;
try {
fileOutputStream = new FileOutputStream("data/object.txt");
objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(strings);
objectOutputStream.flush();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fileOutputStream.close();
objectOutputStream.close();
} catch (IOException e) {
System.out.println("流关闭时候出现异常");
}
}
}
}ObjectInputStream的Demo,将持久化的对象读进程序的过程叫反序列化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class ObjectDemo2 {
public static void main(String[] args) {
FileInputStream fileInputStream = null;
ObjectInputStream objectInputStream = null;
try {
fileInputStream = new FileInputStream("data/object.txt");
objectInputStream = new ObjectInputStream(fileInputStream);
ArrayList<String> strs = (ArrayList<String>) objectInputStream.readObject();
System.out.println("strs的第一个元素为:"+strs.get(0));
} catch (FileNotFoundException e) {
System.out.println("找不到该文件");
} catch (IOException e) {
System.out.println("读文件时候出现了异常");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
在对自定义的类对象执行序列化之前需要让该类先实现Serializable接口,否则会出现报错:
1 |
|
selectOne出现多个数据的问题
日志显示如下:
nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
除了这个错误之外,没有其他的信息了,很头大。我的处理方式是捕获异常之后显性地打印出来,这样的好处是可以帮助我们看到是第几行哪一个方法出现的错误:e.printStackTrace();
然后得到很长很长的冗余信息,我只好把关键性报错的信息丢给GPT,得出结论(信息已脱敏):
堆栈信息中,异常发生在
XXServiceImpl.updateXXStatistics
方法中
之后就是疯狂的看别人的臭长代码时间了,既然问题是出在期望得到一个查询结果的时候却返回了列表,那就到Service的实体类对应的表里看看,果不其然,有两行重复的数据,删掉一行之后,便可以正常分配了。
问题到这其实就解决了,但细究其实还有一个问题:重复的数据是怎么产生的?
XXServiceImpl.updateXXStatistics
这个方法的逻辑是更新统计信息时候,先根据顾问的id和今天这个日期获取统计对象,如果获取不到再插入新的
实在确定不了客户是在哪里分配导致出错的,我就暂且怀疑是判空这里出错了吧:索性加上一句(ObjectUtil.isNotEmpty(todayadminstatics) || todayadminstatics!= null)
写个接口文档
老员工对接的时候没有客户导入的接口文档保存下来,今天要对接接口问题,这锅只能我背/(ㄒoㄒ)/~~
经理让我写一份,我看Knife4j文档里面的参数列表却是没有明确的,崩溃!
我只好把代码丢给GPT,让他帮我列出参数,之后再一个一个检查。
上班好累啊。