0

我使用以下方法读取二进制文件:

public void readFile()
{
    try
    {
        Reader in = new InputStreamReader( this.getClass().getResourceAsStream( this.fileName));
        int count = (in.read() * 0xFF) + in.read();
        int heights = in.read();

        this.shapes = new int[count][];
        for(int ii = 0;ii<count;ii++)
        {
            int gwidth = in.read();
            int[] tempG = new int[gwidth * heights];
            int len = (in.read() * 0xff) + in.read();
            for(int jj = 0;jj<len;jj++)
            {
                tempG[top++] = in.read() * 0x1000000;
            }
            this.shapes[ii] = tempG;
        }
        in.close();

    }catch(Exception e){}
}

它在 netbeans 模拟器和某些设备中完美运行,但在某些设备和kemulator中,似乎 in.read() 读取了一个字符(两个字节),它导致我的应用程序在这些设备和模拟器上崩溃。

以字节为单位读取文件的最佳方法是什么?

4

2 回答 2

3

由于您总是在处理字节,因此您应该使用 anInputStream而不是InputStreamReader.

添加 Javadoc 说:

InputStreamReader 是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将它们解码为字符。它使用的字符集可以由名称指定,也可以显式给出,或者可以接受平台的默认字符集。

read()方法读取一个“字符”:

另一方面,an表示字节InputStream的输入流:

public abstract int read() 抛出 IOException

从输入流中读取数据的下一个字节。值字节作为 int 返回,范围为 0 到 255。如果由于到达流的末尾而没有可用的字节,则返回值 -1。此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。

(顺便说一句,这里有一篇关于 j2me 中“缓冲读者”的过时文章

于 2012-04-17T04:47:35.313 回答
0

我可以直接从诺基亚找到的最佳示例

 public Image readFile(String path) {
        try {
            FileConnection fc = (FileConnection)Connector.open(path, Connector.READ);
            if(!fc.exists()) {
                System.out.println("File doesn't exist!");
            }
            else {
                int size = (int)fc.fileSize();
                InputStream is = fc.openInputStream();
                byte bytes[] = new byte[size];
                is.read(bytes, 0, size);
                image = Image.createImage(bytes, 0, size);
            }

        } catch (IOException ioe) {
            System.out.println("IOException: "+ioe.getMessage());
        } catch (IllegalArgumentException iae) {
            System.out.println("IllegalArgumentException: "+iae.getMessage());
        }
        return image;
   }

http://www.developer.nokia.com/Community/Wiki/How_to_read_an_image_from_Gallery_in_Java_ME

于 2013-06-16T15:43:21.427 回答