2013-05-16 5 views
1

У меня есть некоторый код, который делает:принуждать в ByteArrayInputStream к InputStream

content = Java::byte[s].new 
f = tar.read(content, 0, s) 
content_stream = ByteArrayInputStream.new(content) 

До сих пор, так хорошо

Но когда я пытаюсь использовать метод, который только принимает InputStream, как так:

metadata = ImageMetadataReader.readMetadata(content_stream) 

я получаю следующее исключение:

NameError: no method 'readMetadata' for arguments (java.io.ByteArrayInputStream) on Java::ComDrewImaging::ImageMetadataReader 

Я пробовал использовать content_stream.to_java(java.io.InputStream) и все еще генерирует ту же ошибку. Есть идеи?

ответ

1

Однопараметрический readMetadata() принимает файл; существует два аргумента, которые принимают * Buffered * InputStream и boolean. Вы можете обернуть свой ByteArrayInputStream в BufferedInputStream и решить, хотите ли вы «waitForBytes», что бы это ни значило ...

+0

BufferedInputStream был ответом! Я думал, что схожу с ума, но я просто искал неправильную версию ImageMetadataReader.java - от мастера, а не до версии 2.6.4, которая является той версией, которую я фактически использую. Благодаря! – clee

0

Это потому, что readMetadata имеет 2 подписи, один с одним аргументом: java.io.File и второй, который вы пытаетесь использовать, который принимает 2 аргумента ByteArrayInputStream и логическое. Попробуйте заменить код на ImageMetadataReader.readMetadata(content_stream, false)

+0

Это получает меня 'NameError: no method 'readMetadata' для аргументов (java.io.ByteArrayInputStream, org.jruby .RubyBoolean.False) на Java :: ComDrewImaging :: ImageMetadataReader' – clee

Смежные вопросы