后续使用ServletInputStream为空,使用ServletInputStream为空,ServletInputStream用完后为空

  /**
     * 将ServletInputStream转ByteArrayInputStream 因为 ServletInputStream
     * 被Tomcat做了优化,ServletInputStream.available()是得不到数据长度的,这样得到的就是一个字节数。
     * 所以把ServletInputStream转换为ByteArrayInputStream拿到数据长度,否则后续使用该ServletInputStream可能为空
     * 
     * @param sis
     * @return
     */
    private ByteArrayInputStream convertServeltInputStream(ServletInputStream sis) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int n = 0;
        try {
            while ((n = sis.read(buffer)) != -1) {
                output.write(buffer, 0, n);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
        return input;
    }

 

你可能感兴趣的:(Java,输入输出流)