在Android/Java中将DataInputStream转换为较新的标准

在Android/Java中将DataInputStream转换为较新的标准,java,android,bufferedinputstream,Java,Android,Bufferedinputstream,在Android应用程序中,我有一个这样的方法来读取原始文件: public String inputStreamToString(InputStream isTwo) throws IOException { StringBuffer sBuffer = new StringBuffer(); DataInputStream dataIO = new DataInputStream(isTwo); String strLineTwo = null

在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对象现在似乎已被弃用。我研究了一下,听说最好用BufferedInputStream包装读线。有人能帮我把缺的那一行填好吗?我不知道如何声明br变量。这是我到目前为止所拥有的:

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);
        }
    }

另外,我想确保它在当前的安卓2.3到4.2版本中正常工作。谢谢你的帮助。

我会这样写的。这将大大减少开销,并保留新行原来的状态

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();
}

我就是这样写的。这将大大减少开销,并保留新行原来的状态

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();
}


只是一个建议,如果您正在迁移,那么为什么不使用apache commons等库中的IOUTIL呢?这些库实际上负责管理您的流,还可以为您避免许多错误情况,那么,为什么不使用apache commons等库中的IOUTIL呢?这些库实际上负责管理您的流,并为您避免了许多错误情况

当您可以使用StringBuilder时,请不要使用StringBuffer。不要混合文本和二进制。如果要使用文本,请使用BufferedReader而不是DataInputStream。br=new BufferedReaderData;,有什么问题@Peter Lawrey我将对此进行调查并更正,thanksOP:根据您在上面的问题“有人能帮我完成吗?”中的评论,我们不是您的代码编写者,这意味着,为您编写代码。。见鬼,我们没钱这么做!我们所能做的就是引导你,这种评论在这里是不受欢迎的@t0mm13b,除非OP离得太远,更容易重新写入;如果可以使用StringBuilder,请不要使用StringBuffer。不要混合文本和二进制。如果要使用文本,请使用BufferedReader而不是DataInputStream。br=new BufferedReaderData;,有什么问题@Peter Lawrey我将对此进行调查并更正,thanksOP:根据您在上面的问题“有人能帮我完成吗?”中的评论,我们不是您的代码编写者,这意味着,为您编写代码。。见鬼,我们没钱这么做!我们所能做的就是引导你,这种评论在这里是不受欢迎的@t0mm13b,除非OP离得太远,更容易重新写入;注:这假设流使用与系统默认值相同的编码。这种情况不一定会发生,并可能导致冲突。我建议显式地设置编码。顺便说一句,这与apache在EntityUtils中使用的方式差不多,只是它们使用CharArrayBuffer而不是StringWriter。不确定一个是否比另一个好,如果Android有一个内置的功能,使用起来会更好。只看一下Android StringWriter代码。尽管您可能有兴趣知道它使用StringBuffer作为数据容器^^我在新旧版本的Android上也测试了这个,没有遇到任何问题。注:这假设流使用与系统默认值相同的编码。这种情况不一定会发生,并可能导致冲突。我建议显式地设置编码。顺便说一句,这与apache在EntityUtils中使用的方式差不多,只是它们使用CharArrayBuffer而不是StringWriter。不确定一个是否比另一个好,如果Android有一个内置的功能,使用起来会更好。只看一下Android StringWriter代码。尽管您可能有兴趣知道它使用StringBuffer作为数据容器^^我也在新旧版本的Android上测试了这个,没有遇到任何问题。