最近在用 StringBuffer 导致内存溢出,用什么办法可以将StringBuffer 转换成 byte[] 然后在解码成 string.InputStreamReader isr = new InputStreamReader(httpConn
.getInputStream(), "UTF-8");
BufferedReader in = new BufferedReader(isr); String inputLine;
StringBuffer buffer = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
buffer.append(inputLine);
}
in.close();
isr.close();
return buffer.toString();
.getInputStream(), "UTF-8");
BufferedReader in = new BufferedReader(isr); String inputLine;
StringBuffer buffer = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
buffer.append(inputLine);
}
in.close();
isr.close();
return buffer.toString();
如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第16个字符的时候它会将容量增加到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何时只要StringBuffer到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。所以总是给StringBuffer设置一个合理的初始化容量值是错不了的,这样会带来立竿见影的性能增益。测试你字符串大小,而后看你的内存存储容量。
你还是要用stringbuffer tostring 方法啊
参考代码import java.io.*;public class CopyDemo{
public static void main (String[] args) {
try{
//源文件
File file =new File("student_mdf.mdf");
FileInputStream input =new FileInputStream(file);
//输出
FileOutputStream output =new FileOutputStream("F:\\student_mdf.mdf");
//1024字节一个批次
byte [] byt =new byte[1024];
while (input.read(byt)!=-1){
output.write(byt);
}
output.close();
input.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
new String(byte[] byte)
像你的程序从一个 HTTP 请求中接收数据,像 HEAD 之类的当然可以全收到才开始处理,但如果你发现了连续2 个换行就表示一个部分已经完了,比如一个 HEAD 已经完了,后面接下来的是内容,内容的长度在 HEAD 里面已经报告过了,我们知道大小就准备分配内存,如果是文件上传之类的数据,我们就用临时文件缓存它。像你的程序在处理 HTTP 时不考虑 HEAD 中的大小直接把所有内容全收到后再 toString,然后再处理是不实际的做法。除非你知道每次请求只有很小的字节数并且用户是内部用户,他们都知道你的程序怎么约定的。
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(CharSequence seq)
public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。
StringBuffer(int capacity)
构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。