【问题标题】:Coerce a ByteArrayInputStream to InputStream将 ByteArrayInputStream 强制为 InputStream
【发布时间】:2013-05-16 07:51:41
【问题描述】:

我有一些代码:

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),但仍然会产生同样的错误。有什么想法吗?

【问题讨论】:

    标签: java jruby bytearrayinputstream


    【解决方案1】:

    单参数 readMetadata() 接受一个文件;有一个带有 *Buffered*InputStream 和一个布尔值的两个参数。您可以将 ByteArrayInputStream 包装在 BufferedInputStream 中并决定是否要“waitForBytes”,无论这意味着什么......

    【讨论】:

    • BufferedInputStream 就是答案!我以为我快疯了,但我只是在查看错误版本的 ImageMetadataReader.java - 来自 master,而不是 2.6.4,这是我实际使用的版本。谢谢!
    【解决方案2】:

    这是因为 readMetadata 有 2 个签名,一个带有一个参数:一个 java.io.File 和一个您尝试使用的带有 2 个参数的 ByteArrayInputStream 和一个布尔值。尝试将您的代码替换为ImageMetadataReader.readMetadata(content_stream, false)

    【讨论】:

    • 这让我NameError: no method 'readMetadata' for arguments (java.io.ByteArrayInputStream,org.jruby.RubyBoolean.False) on Java::ComDrewImaging::ImageMetadataReader
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2012-04-11
    • 2011-05-14
    • 2012-11-01
    相关资源
    最近更新 更多