日期:2014-05-20  浏览次数:20816 次

我们爱分享----一些工作上需要注意的小事情..
我没什么好分享的 就将最近开发过程中遇到的有趣的事情说一下吧(近期的 没办法很系统的说 见谅)

基础篇


关于对象类型与原始类型的羁绊...

当函数的参数列表中定义的参数类型为原始类型(如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 的,这三种中的任何一种都可以读,不会产生阻塞吧。