ChannelBufferInputStream responseStream = (ChannelBufferInputStream) response.getBodyAsStream();
ArrayList<Byte> arrayList = new ArrayList<Byte>();
try {
while (responseStream.available() > 0) {
arrayList.add(responseStream.readByte());
}
} catch (IOException e) {
e.printStackTrace();
return internalServerError();
}
Iterator<Byte> iterator = arrayList.iterator();
byte[] bytes = new byte[arrayList.size()];
int i = 0;
while (iterator.hasNext()) {
bytes[i++] = iterator.next();
}
Bu kod benim web uygulaması her sayfa yüklemesinde denir. Oldukça hızlı koşuyor gibi görünüyor, ama bu koşuyu daha hızlı hale getirebilecek bir şey var mı?InputStream byte [] içine dönüştürmenin en etkin yolu?
Düzenleme - bayt dizisi, çıkış akımına
ChannelBufferInputStream responseStream = (ChannelBufferInputStream) response.getBodyAsStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
int read = responseStream.read();
while (read != -1) {
byteArrayOutputStream.write(read);
read = responseStream.read();
}
} catch (IOException e) {
e.printStackTrace();
return internalServerError();
}
byte[] bytes = byteArrayOutputStream.toByteArray();
return ok(bytes).as(response.getHeader("Content-type"));
düzenleme kullanılarak Güncelleme - Deney test kodu
ChannelBufferInputStream responseStream = (ChannelBufferInputStream) response.getBodyAsStream();
long t1 = System.nanoTime();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
int read = responseStream.read();
while (read != -1) {
byteArrayOutputStream.write(read);
read = responseStream.read();
}
} catch (IOException e) {
e.printStackTrace();
return internalServerError();
}
byte[] bytes = byteArrayOutputStream.toByteArray();
long t2 = System.nanoTime();
System.out.println(t2-t1);
return ok(bytes).as(response.getHeader("Content-type"));
Ortalama Zaman 100 + isteği sonra - 46873
ChannelBufferInputStream responseStream = (ChannelBufferInputStream) response.getBodyAsStream();
long t1 = System.nanoTime();
ArrayList<Byte> arrayList = new ArrayList<Byte>();
try {
while (responseStream.available() > 0) {
arrayList.add(responseStream.readByte());
}
} catch (IOException e) {
e.printStackTrace();
return internalServerError();
}
Iterator<Byte> iterator = arrayList.iterator();
byte[] bytes = new byte[arrayList.size()];
int i = 0;
while (iterator.hasNext()) {
bytes[i++] = iterator.next();
}
long t2 = System.nanoTime();
System.out.println(t2-t1);
return ok(bytes).as(response.getHeader("Content-type"));
Ortalama Zaman 100 sonra + istek - 522848
long t1 = System.nanoTime();
byte[] bytes;
try {
bytes = org.apache.commons.io.IOUtils.toByteArray(responseStream);
} catch (Exception e) {
return internalServerError();
}
long t2 = System.nanoTime();
System.out.println(t2-t1);
Ortalama Süre isteği 100+ sonra - 45088
long t1 = System.nanoTime();
byte[] bytes;
try {
bytes = sun.misc.IOUtils.readFully(responseStream, -1, true);
} catch (Exception e) {
return internalServerError();
}
long t2 = System.nanoTime();
System.out.println(t2 - t1);
Ortalama Süre isteği 100+ sonra - 20180
Hey Matt, bu yazıyı okudum. Maksimum verim arıyorum. – sissonb
Eğer bu konuda endişeleniyorsanız, farklı uygulamaları kendiniz ölçüp karşılaştırmalısınız. Ancak, "oldukça hızlı koşuyor gibi görünüyor" dediğinizden beri, kodunuzu daha hızlı çalıştırmaya çalışıyorsanız bu bir darboğaz gibi değil. –
Bu http://stackoverflow.com/questions/6649100/cast-wrapper-array-to-corpanying-primitive-display –