【问题标题】:Passing BufferedInputStream to a method that accepts InputStream将 BufferedInputStream 传递给接受 InputStream 的方法
【发布时间】:2016-10-25 21:18:57
【问题描述】:

我正在调用一个接受InputStream 的方法。这是github上的方法:https://github.com/drewnoakes/metadata-extractor/blob/2.8.0/Source/com/drew/imaging/ImageMetadataReader.java#L89

我正在使用 BufferedInputStream 调用该方法,因为它是 InputStream 的子级,所以它应该可以工作,但我不断收到此错误:

No signature of method: static com.drew.imaging.ImageMetadataReader.readMetadata() is applicable for argument types: (java.io.BufferedInputStream) values: [java.io.BufferedInputStream@74d4ec5f]
Possible solutions: readMetadata(java.io.File), readMetadata(java.io.BufferedInputStream, boolean). Stacktrace follows:
Message: No signature of method: static com.drew.imaging.ImageMetadataReader.readMetadata() is applicable for argument types: (java.io.BufferedInputStream) values: [java.io.BufferedInputStream@74d4ec5f]
Possible solutions: readMetadata(java.io.File), readMetadata(java.io.BufferedInputStream, boolean)
    Line | Method
->>  137 | settings  in com.foo.scanner.AdminController
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    198 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter  in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter  in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter  in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     59 | doFilter  in grails.plugin.springsecurity.web.SecurityRequestHolderFilter

这是我的代码:

println file62.name //prints name of the file
println file62.inputStream.getClass() //prints java.io.BufferedInputStream
InputStream is = (InputStream)file62.inputStream
Metadata metadata = com.drew.imaging.ImageMetadataReader.readMetadata(is) //readMetadata expects InputStream

我拥有的库版本:

✗ grails dependency-report | grep "drew" +--- com.drewnoakes:metadata-extractor:2.9.1 +--- com.drewnoakes:metadata-extractor:2.9.1 +--- com.drewnoakes:metadata-extractor:2.9.1

这是2.9.1中的方法:https://github.com/drewnoakes/metadata-extractor/blob/2.9.1/Source/com/drew/imaging/ImageMetadataReader.java#L88

【问题讨论】:

    标签: java groovy inputstream metadata-extractor


    【解决方案1】:

    异常表示该方法需要 FileBufferedInputStream 布尔值。没有重载需要 BufferedInputStream

    如果您确定形参和实参匹配,那么这种异常(由形参不匹配引起)的最可能原因是周围有一个旧罐子。运行mvn cleangradle clean,检查您的 Web 容器的 lib 目录,并从系统中清除错误的 jar。

    【讨论】:

    • github 链接说该方法需要InputStream。我可以不通过BufferedInputStream 预计InputStream 吗?
    • 你可以。但是例外不同意github。你有不同版本的 jar 吗?
    • 我正在浏览文件的历史记录。该方法曾经采用InputStream,但现在不再采用。看起来你有一个比 2.8.0 更新的 jar。
    • 没有。我有正确的版本。我正在更新问题
    • >_
    【解决方案2】:

    @PaulHicks 完全正确。早在 2012 年,您调用的 API 就被误导并以极端偏见的方式被删除,这次提交是:

    https://github.com/drewnoakes/metadata-extractor/commit/9f3854b81313f1ea498b991d36253f221db79dca#diff-8fa1b864bada9112be69ec00784af715

    GitHub 建议 API 在 2.7.0 版本中被删除。

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 2013-11-14
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2016-01-26
      相关资源
      最近更新 更多