我目前正在制作一个基本的http代理,可以进行一些文本审查。 当我从输入流中读取时,我希望操纵字节数组的文本(即替换或删除)并将其传输到客户端的输出流。但是,来自服务器的输入流大小可能非常大(> 100MB)。有没有办法有效地做到这一点?
在从服务器读取数据并将数据发送到客户端时,这是我的代码段(不会操纵任何数据)。
int count = 0;
byte[] buffer = new byte[102400];
while ((count = fromServer.read(buffer)) > 0){
System.out.println(new String(buffer, "UTF-8"));
toClient.write(buffer, 0, count);
fos.write(buffer, 0, count);
}
fos.close();
server.close();
client.close();
fromServer是来自服务器的输入流,fos是用于缓存目的的文件,toClient是客户端的输出流。
非常感谢!
答案 0 :(得分:0)
我同意马特在这里。
没有缓冲,read()或readLine()的每次调用都可能导致从文件中读取字节,转换为字符,然后返回,这可能是非常低效的。
如果不操纵你的数据,我会建议以下
IOUtils.copy(inputStream, outputStream)
以下代码段可以帮助您处理数据
FileOutputStream fos = new FileOutputStream(new File("c:\\output.xml"));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("c:\\input.xml")), 32*1024*1024);
int bytesRead = -1;
byte[] buffer = new byte[4096];
while ((bytesRead = bis.read(buffer)) != -1) {
String strFileContents = new String(buffer, 0, bytesRead);
System.out.println(strFileContents);
fos.write(buffer, 0, bytesRead);
}
fos.close();
bis.close();
字符串中的操作很容易。