• 2011-05-07

    读输入流一定要循环 - [IT]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/ma3r-logs/127960207.html

    昨天程序出了一点问题。
    在读输入流的时候,想着内容没多少,一下读完得了——

    int length = req.getContentLength();
    byte[] bytes = new byte[length];
    ServletInputStream sis = req.getInputStream();
    sis.read( bytes );
    String string = new String( bytes );
    sis.close();

    结果出问题了,有时候读半截。
    这才明白,读流的时候,并不是一定要把缓冲区充满才能返回,即使没有读完。
    于是,只好改成了——

    byte[] bytes = new byte[1024];
    ServletInputStream sis = req.getInputStream();
    StringBuilder sb = new StringBuilder();
    int length;
    while ( ( length = sis.read( bytes ) ) != -1 )
        sb.append( new String( bytes, 0, length ) );
    sis.close();

    一次教训,就是一次经验。

    分享到: