0

我在这里执行的一定有某种小的技术错误,我无法掌握。该文件位于 AndroidLibrary 的 raw/ 目录中,并且以这种方式可以很好地使用对不同文件的访问。也许这里有一个小错误,我一直在琢磨?

注意:原始资源是未压缩的格式,因此可以使用 .jet 扩展名读取它,因此内部文件系统不会有任何抱怨。

编辑(更新):显然为了打开流,openRawResourceFd 是不够的。除此之外,我还需要调用assetDescriptor.createInputStream(); 如果我不这样做,则流将无法正常运行。奇怪,因为我希望 openRawResourceFd 能做到这一点。

        AssetFileDescriptor assetDescriptor = resources.openRawResourceFd(com.grubulon.R.raw.testing_patches);
        BufferedReader bufferedInputStream = new BufferedReader(new FileReader(assetDescriptor.getFileDescriptor()));

        colorSpace = bufferedInputStream.readLine();

        while ((currentLine = bufferedInputStream.readLine()) != null) 
        {
            rgbValues = currentLine.split("\\t");
            red = Integer.parseInt(rgbValues[0]);
            green = Integer.parseInt(rgbValues[1]);
            blue = Integer.parseInt(rgbValues[2]);
            rgbPatches.add(new RgbColorValue(red, green, blue));
        }

        bufferedInputStream.close();
        assetDescriptor.close();

该文件本身实际上只是一个 RGB 颜色值的 Excel 电子表格,正在读取它们之间的选项卡。选项卡组件似乎不是问题,但第一行是一大堆乱码。不是色彩空间,或者根本就不是值。我不确定这里发生了什么。

文件示例:

RGB
0   0   0
17  17  17
34  34  34
51  51  51
68  68  68
85  85  85
102 102 102
119 119 119
136 136 136
153 153 153
170 170 170
187 187 187
204 204 204
221 221 221
238 238 238
255 255 255
255 0   0
0   255 0
0   0   255

以下是 Logcat 中遇到的示例,即使文件中的文本应该很少。

日志猫窗口

4

1 回答 1

0

以下基于上面的更新是解决问题的方法。请注意使用 openRawResourceFd 调用创建assetDescriptor 之后的行。

    AssetFileDescriptor assetDescriptor = resources.openRawResourceFd(com.grubulon.R.raw.testing_patches);
    assetDescriptor.createInputStream();
    BufferedReader bufferedInputStream = new BufferedReader(new FileReader(assetDescriptor.getFileDescriptor()));

    colorSpace = bufferedInputStream.readLine();

    while ((currentLine = bufferedInputStream.readLine()) != null) 
    {
        rgbValues = currentLine.split("\\t");
        red = Integer.parseInt(rgbValues[0]);
        green = Integer.parseInt(rgbValues[1]);
        blue = Integer.parseInt(rgbValues[2]);
        rgbPatches.add(new RgbColorValue(red, green, blue));
    }

    bufferedInputStream.close();
    assetDescriptor.close();
于 2013-06-12T15:45:31.137 回答