2013-05-16 71 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和一個布爾值。你可以將你的ByteArrayInputStream包裝在一個BufferedInputStream中,並決定是否要'waitForBytes',無論這意味着什麼......

+0

BufferedInputStream就是答案!我以爲我瘋了,但我只是看着ImageMetadataReader.java的錯誤版本 - 來自master,而不是2.6.4,這是我實際使用的版本。謝謝! – clee

0

這是因爲readMetadata有兩個簽名,一個帶有一個參數:一個ja​​va.io.File,另一個嘗試使用,它需要2個參數ByteArrayInputStream和一個布爾值。嘗試用ImageMetadataReader.readMetadata(content_stream, false)

+0

這讓我'NameError:no method'readMetadata'for arguments(java.io.ByteArrayInputStream,org.jruby .RubyBoolean.False):: Java :: ComDrewImaging :: ImageMetadataReader' – clee