Работа с DataInputStream в соответствии с новыми стандартами в Android/Java

У меня был такой метод в приложении для 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 вар. Это то, что я до сих пор:

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 ответа

Решение

Вот как бы я это написал. Это значительно снижает накладные расходы и сохраняет переводы строк такими, какими они были изначально.

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

Просто предложение, если вы мигрируете, то почему бы не использовать IOUtils из библиотек, как apache commons и т.д., которые фактически заботятся об управлении вашими потоками, а также избавляют вас от множества ошибочных условий

Другие вопросы по тегам