2014-12-20 3 views
1

Есть ли способ получить Netty ByteBuf из java-файла? Я пытаюсь использовать собственный класс Snappy для проверки контрольной суммы. Ниже мой код, где я хотел бы получить File объект в переменной bytebuf.Как преобразовать объект File в Netty ByteBuffer

import io.netty.buffer.ByteBuf; 

File file = new File("boot.zip"); 
ByteBuf byteBuf = Unpooled.buffer(128); 
byteBuf.writeBytes(new FileInputStream(file)); 
int expectedChecksum = Snappy.calculateChecksum(byteBuf); 
logger.info("checksum = "+expectedChecksum); 

boolean checksumValid = true; 
try {  
    CustomSnappy.validateChecksum(expectedChecksum, byteBuf); 
} catch(DecompressionException e) { 
    checksumValid = false; 
    e.printStackTrace(); 
    logger.error("DecompressionException in checksum calculation " + e);    
} catch(Exception e) { 
    checksumValid = false; 
    e.printStackTrace(); 
    logger.error("Exception in checksum calculation " + e); 
} 

Я использовал Unpooled.buffer (128), но это дает мне No signature of method :io.netty.buffer.UnpooledHeapByteBuf.writeBytes() is applicable for argument types: (java.io.FileInputStream) values: [[email protected]]

ответ

1

Вы можете использовать метод ByteBuf#writeBytes(InputStream). Это должно работать, но я не тестировал его.

ByteBuf buffer = // see http://stackoverflow.com/a/15088238/834 
buffer.writeBytes(new FileInputStream(file)); 

См http://netty.io/4.0/api/io/netty/buffer/ByteBuf.html#writeBytes(java.io.InputStream,%20int)

документация показывает, как создать новый ByteBuf: http://netty.io/4.0/api/io/netty/buffer/Unpooled.html

+0

я не могу создать объект 'ByteBuf' от абстрактного типа – Ricky

+0

Обновленного ответ со ссылками на официальную документацию и хороший ответ на SO. – cringe

+0

, но я не могу найти что-либо для использования с объектом File в вашей ссылке. – Ricky

4

Вы можете создали MappedByteBuf из FileChannel и завернуть его в ByteBuffer через Unpooled.wrappedBuffer (..).

0

Если вы используете JDK 1.7, класс java.nio.file.Files может упростить количество статических методов.

ByteBuf buffer = Unpooled.copiedBuffer(Files.readAllBytes(new File(this.getClass().getResource("/requests/overPackageRequest").getFile()).toPath()));