我们爱分享----一些工作上需要注意的小事情..
我没什么好分享的 就将最近开发过程中遇到的有趣的事情说一下吧(近期的 没办法很系统的说 见谅)
基础篇
关于对象类型与原始类型的羁绊...
当函数的参数列表中定义的参数类型为原始类型(如int,long)而调用者传递进去的参数是对象类型时(如Integer.Long) 如果对象类型为空 则会出现
空指针错误 自动拆装箱会调用将对象类型转换为原始类型的函数 如果对象为空 就出现这个异常 虽然很基础 但是千万要记在心里
尤其是在没有使用空对象的属性和函数时出现
空指针异常....(我被坑了 代码不是我写的 仔细看了下才知道 喵了个咪的)
另外 经常有人会问开发过程中用原始类型好还是用对象类型好 我的恩师曾经建议我用原始类型 原因是不用判断null..(当然 你们有你们的原因)
其实在我看来 没有什么好坏之分 他们各有各的用处 虽然说用原始类型无须调用new 也无须创建对象 这节省了时间和空间 但是原始类型能够 表达null么? 我想不能 毕竟null与0的意义是不同的 所以 结论是:看业务..
IO篇
关于java.util.Properties中list(PrintStream out)的问题
这里我贴下该函数的源代码(还有个PirintWriter作为参数的同名函数 基本实现都一样 就不都贴了)
Java code
public void list(PrintStream out) {
out.println("-- listing properties --");
Hashtable h = new Hashtable();
enumerate(h);
for (Enumeration e = h.keys();e.hasMoreElements() ;) {
String key = (String)e.nextElement();
String val = (String)h.get(key);
if (val.length() > 40) {
val = val.substring(0, 37) + "...";
}
out.println(key + "=" + val);
}
}
请各位注意 读取的时候没有对value做截取 但是通过list函数将Properties的内容写入到指定的输出流的时候 诡异的做了个截取
这个问题是俺们群里的太狼童鞋发现的 有些事情还是比较难理解的..
在这里 太狼童鞋推荐大家使用public void store(OutputStream out, String comments) throws
IOException,不过这个有字符集的问题..
关于字符流的readLine的问题
这个是个老问题 不过还是要说下 不同操作系统上的换行符是不一样的 比如win 是\r\n,linux 是\n 而mac是\r
所以说 假设你用字符流的readLine来读取某个服务器反馈给你的信息 如果发生莫名奇妙的阻塞 请先确认对方服务器的操作系统..
PS.如果有[Java网络编程]这本书的童鞋 可以去看下书中作者对这个问题的处理 他重写了readLine...
那个啥 俺也算是响应活动了 分就不多给了
------解决方案--------------------
readLine 并不需要区别换行是 \r\n \n 或者是 \r 的,这三种中的任何一种都可以读,不会产生阻塞吧。