java - java中字符串缓冲区的问题

标签 java inputstream stringbuffer

我有一个servlet,其中我从InputStream 获取XML 格式的表单数据。我能够以 XML 格式检索表单数据,并能够将其写入文件中。如果我打开该文件,我就可以看到我的表单数据。

现在的问题是,当我尝试将表单数据附加到字符串缓冲区时,它没有发生。我尝试了buffer.append()。在该方法之后,当我尝试打印字符串缓冲区值时,控制台中没有显示/打印任何内容。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                // TODO Auto-generated method stub
                 response.setContentType("html/text");
             PrintWriter out = response.getWriter();
             out.println("doPost Method is excecuting");
             DataInputStream in = new DataInputStream (request.getInputStream());
             StringBuffer buffer = new StringBuffer();
             File file = new File("reqOutput.txt");
             file.createNewFile();
             FileWriter writer = new FileWriter(file); 
             int value;
             while ((value=in.read()) != -1) {
                             buffer.append(value);
                        writer.write(value);
                      }
             System.out.println("Value is : "+ buffer.toString()); // Nothing is printing
             writer.flush();
             writer.close();
}

我的代码有什么问题。请提出任何建议。

最佳答案

这是修改为从文件中读取的代码:

    public static void main(final String[] args) throws Exception {
        BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader("test"));
            final StringBuilder sb = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                sb.append(line);
            }
            System.out.println("Value is : " + sb.toString());
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }

我在 FileReader 周围添加了 BufferedReader 来优化读取。 我从一次读一个字符改为逐行阅读。 这也为您提供了字符串形式的结果,因此您不必转换 int。

此外,我添加了资源处理(7 之前的样式,没有异常处理)并切换到 StringBuilder。

输出:

hello world! -> Value is : hello world!

我认为还有另一个问题,不在代码的这一部分中。

对您的代码的其他评论(与问题无关):

StringBuffer 是一个线程安全的实现。如果您不需要这个(就像在 servlet 示例中一样),您最好使用 StringBuilder。

不要关闭代码块内的资源,使用 try-finally (或自 Java 7 try-with-resources 起)来保证资源始终关闭,即使代码块中某处发生异常也是如此。

关于java - java中字符串缓冲区的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28428447/

相关文章:

Java mailto 非法字符冒号?

java - 两个 int 数组的比较结果出乎意料

Java - 多个并发 runtime.exec() InputStreams 的问题

java - 将输入流转换为位图

java - 将文本文件附加到 StringBuffer 后,有没有办法恢复换行符?

java - 需要澄清最终的 StringBuffer 对象

Java 接口(interface) : Calling an implementation class based on object types

java - 在运行时替换 Spring 容器内的 bean

java - 使用关于持久性和 XML 的 InputStream 的最佳方式

java - StringBuffer 类中的 EnsureCapacity(intminimumCapacity) 方法