【问题标题】:Reading from input stream从输入流中读取
【发布时间】:2013-06-03 23:44:25
【问题描述】:

我正在为我的 Android 应用程序开发一个库,我在其中将额外信息附加到 PNG 图像的末尾。我正在创建一个 DataOutputStream 变量并将额外的信息写入它的末尾,以便在我打开 PNG 并使用 DataInputStream 将其转换为位图时使用。我添加了一个标记来区分图像代码何时完成以及我的额外信息何时开始。

额外的数据被正确地附加在标记之后。问题是读取 ONLY DataInputStream 的 PNG 数据以将其转换为位图。正在读取所有 DataInputStream(即使我在标记之前添加了大量占位符字节)。

我用来读取流的 PNG 部分的实现是:

位图图像 = BitmapFactory.decodeStream(inputStream);

我想知道是否有另一种方法可以在 PNG 数据字节后停止读取流。

如果没有更好的方法,我将采取的方法是将输入流复制到数组中。然后我会读取所有数据,直到到达标记为止。

【问题讨论】:

    标签: java android bitmap inputstream bitmapfactory


    【解决方案1】:

    您可以创建一个包装器 InputStream,然后在读取整个流之前报告 EOF。这样可以避免将整个流读入字节数组。

    class MarkerInputStream extends FilterInputStream {
        MarkerInputStream(InputStream in) {
            super(in);
        }
    
        @Override
        public int read() throws IOException {
            if (isAtMarker()) {
                return -1;
            }
            // may need to read from a cache depending on what isAtMarker method does.
            return super.read();
        }
    
        private boolean isAtMarker() {
            // logic for determining when you're at the end of the image portion
            return false;
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      相关资源
      最近更新 更多