java 中的字符串缓冲区问题
Issue with String Buffer in java
我有一个 servlet,其中我从 InputStream 获取 XML 格式的表单数据。我能够以 XML 格式检索表单数据,并能够将其写入文件。如果我打开文件,我就能看到我的表单数据。
现在的问题是,当我尝试将表单数据附加到字符串缓冲区时,它没有发生。我试过了buffer.append()
。在该方法之后当我尝试打印字符串缓冲区值时,控制台中没有 showing/printing。
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();
}
请问我的code.Any建议有什么问题。
这是您修改后的代码以从文件中读取:
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。
此外,我添加了资源处理(pre-7 样式且没有异常处理)并切换到 StringBuilder。
输出:
hello world! -> Value is : hello world!
我认为还有另一个问题,不在您的代码的这一部分。
对您的代码的其他评论(与问题无关):
StringBuffer 是一个线程安全的实现。如果您不需要这个(就像在您的 servlet 示例中那样),您最好使用 StringBuilder。
不要关闭代码块内的资源,使用 try-finally(或自 Java 7 try-with-resources 以来)保证资源始终关闭,即使代码块中某处发生异常.
我有一个 servlet,其中我从 InputStream 获取 XML 格式的表单数据。我能够以 XML 格式检索表单数据,并能够将其写入文件。如果我打开文件,我就能看到我的表单数据。
现在的问题是,当我尝试将表单数据附加到字符串缓冲区时,它没有发生。我试过了buffer.append()
。在该方法之后当我尝试打印字符串缓冲区值时,控制台中没有 showing/printing。
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();
}
请问我的code.Any建议有什么问题。
这是您修改后的代码以从文件中读取:
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。
此外,我添加了资源处理(pre-7 样式且没有异常处理)并切换到 StringBuilder。
输出:
hello world! -> Value is : hello world!
我认为还有另一个问题,不在您的代码的这一部分。
对您的代码的其他评论(与问题无关):
StringBuffer 是一个线程安全的实现。如果您不需要这个(就像在您的 servlet 示例中那样),您最好使用 StringBuilder。
不要关闭代码块内的资源,使用 try-finally(或自 Java 7 try-with-resources 以来)保证资源始终关闭,即使代码块中某处发生异常.