Servlet で 帯域制限

特定のファイルをServletでフィルターして帯域制限してみました。

int length = 1024 * 1024 / 8;
// bps → byte/s のため 8で割る
File file = new File("C:\tmp\test.avi");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream(), length);
in = new BufferedInputStream(new FileInputStream(file), length);
byte[] buff = new byte[length];
int i;
while((i = in.read(buff, 0, length)) != -1){
	long start = System.currentTimeMillis();
	out.write(buff, 0, i);
	long diff = System.currentTimeMillis() - start;
	Thread.sleep(1000 - diff);
}

こんな風にやると、
128K/s(1Mbps) に制限できます。