IO流中,有一些API的返回值必须要使用,也就是必须考虑执行失败情况下的操作,否则findBugs就要出现警告。例如:
- inputStream.read:读到最后,缓存很可能是读不满的。
- inputStream.skipBytes:
- file.delete:删之前要判断存不存在,删完之后还要根据返回值判断删除是否成功。
- mkdirs、createNewFile返回false怎么办?
如果操作失败,至少可以打印出一个日志!这是最简单的消除警告的方法!
解析协议就涉及到读文件(用缓存读,或一行一行读)和割文件。
编码问题
- 把字节数组转换为字符串:new String(字节数组, charSet)
标准读流格式:需要用到read方法的返回值:实际读取的字节数。
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
int len = 0;
try {
while ((len=in.read(buf)) != -1) {
sb.append(new String(buf, 0, len, charset));
}
} catch (IOException e) {
e.printStackTrace();
}
标准关流格式:使用finally。try可以单独配合finally使用,而不一定非要使用catch,否则为了关流,异常也不能抛了。
URL编码
- 通常也被称为百分号编码。
- application/x-www-form-urlencoded说的就是url编码后的参数!
URL编码默认使用的字符集是US-ASCII码,例如a在US-ASCII码中对应的字节值是0x61,那么URL编码之后得到的就是%61,我们在地址栏中输入http://g.cn/search?q=%61%62%63,实际上就等于在google中搜索abc。又如@符号在ASCII字符集中对应的字节为0x40,经过URL编码之后得到的就是%40。 - 为什么要进行编码?1. 字符转义。防止引起解析程序的歧义。2. 汉字
- 在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。这个时候我们就要使用另一种编码类型“multipart/form-data”
String.format
- 它的参数就是可变参,因为事先不知道一个string里面要有多少参数需要填充。
- 使用场景:日期、保留小数、拼接SQL、int转string补全位数。
网友评论