将DataInputStream解决为Android / Java中的新标准

时间:2012-12-19 16:33:58

标签: java android bufferedinputstream

我在阅读原始文件的Android应用中有这样的方法:

public String inputStreamToString(InputStream isTwo) throws IOException {
        StringBuffer sBuffer = new StringBuffer();
        DataInputStream dataIO = new DataInputStream(isTwo);
        String strLineTwo = null;
        while ((strLineTwo = dataIO.readLine()) != null) {
            sBuffer.append(strLineTwo + "\n");
        }
        dataIO.close();
        isTwo.close();
        return sBuffer.toString();

    }

但是,DataInputStream对象现在似乎已弃用。我对它进行了研究,并且听说最好用readline()包裹BufferedInputStream。有人可以帮我完成他的(填写缺失线)吗?我不知道如何声明br var。这就是我到目前为止所做的:

public String inputStreamToString(InputStream isTwo) throws IOException {
        String strLineTwo = null;
        BufferedReader br = null;

        StringBuffer sBuffer = new StringBuffer();
        InputStreamReader dataIO = new InputStreamReader(isTwo);


        while ((strLineTwo = br.readLine()) != null) {
            sBuffer.append(strLineTwo + "\n");
        }

        dataIO.close();
        isTwo.close();
        return sBuffer.toString();

以上是我尚未触及的代码,它调用了这个方法:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tech);
        InputStream iFileTwo = getResources().openRawResource(R.raw.testing);
        try {
            TextView helpText = (TextView) findViewById(R.id.tvStream);
            String strFileTwo = inputStreamToString(iFileTwo);
            helpText.setText(strFileTwo);

        } catch (Exception e) {
            Log.e(DEBUG_TAG_THREE, "InputStreamToString failure", e);
        }
    }

另外,我想确保它适用于从Android 2.3到4.2(当前)。谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

这就是我写它的方式。这样可以减少开销,并保留最初的换行符。

public String inputStreamToString(InputStream in) throws IOException {
    StringBuilder out = new StringBuilder();
    char[] chars = new char[1024];
    Reader reader = new InputStreamReader(in /*, CHARSET_TO_USE */);

    try {
        for (int len; (len = reader.read(chars)) > 0; )
            out.append(chars, 0, len);
    } finally {
        try {
            in.close();
        } catch (IOException ignored) {
        }
    }
    return out.toString();
}

答案 1 :(得分:0)

只是一个建议,如果你正在迁移,那么为什么不使用像IOUtils这样的库中的apache commons来实际管理你的流,并为你节省很多错误的条件