【问题标题】:Parsing text file line by line to array using BufferedInputStream with RTL characters in Java在Java中使用带有RTL字符的BufferedInputStream将文本文件逐行解析为数组
【发布时间】:2026-01-07 23:05:01
【问题描述】:

伙计们,我需要了解一些事情: \n 出现在新行的开头? 如果是这样,我正在尝试解析一个包含 RTL 字符的文件,并且它们位于行首,所以:

  1. xxx xxxx, ABC DEFG, 1, 11, 111, 786
  2. xxx xxxx, ABC DEFG, 1, 11, 111, 786
  3. 等等……

在解析 txt 文件(来自资产的 android)时,我不断从下一行获取第一个单词,并与上一行的 Integer 连接。 我已经尝试了一切,但没有运气。

这是一个代码sn-p:

            InputStream is;
            try {
                is = new BufferedInputStream(getAssets().open(fileName));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            try {
                InputStream is = new BufferedInputStream(getAssets().open(fileName));
                byte[] c = new byte[128];
                byte[] d = null;
                int readChars = 0;
                int lineNumber = 0;
            String line;
                String[] paramLineArray = null;
                int k;
                while ((readChars = is.read(c)) != -1) {
                    for (int i = 0; i < readChars; i++) {
                        if (c[i] == '\n') {
                            lineNumber++;
                            line = new String(c);
                            k = 0;
                            StringTokenizer st = new StringTokenizer(line,",");
                            paramLineArray = new String[st.countTokens()];
                            while (st.hasMoreTokens()) {
                              // get next token and store it in the Line
                              paramLineArray[k] = st.nextToken();
                              k++;
                            }
                        }                       
                    }
                    publishProgress(((int) (1 / (float) lineNumber) * 100));
                    populateTables(paramLineArray, tblName, tblElements);
                }

我想要实现的是:

非常快速地解析文本文件 逐行插入到一个数组中,该数组被插入到数据库中...

有什么想法吗???

非常感谢您的帮助,因为我已经做了几天了(失去了我的头发:-()...

目前我有使用 InputStreamReader 的代码,但它非常慢!!!!!

谢谢。

玉叶。

【问题讨论】:

  • \n 在行尾。

标签: java android text-parsing stringtokenizer bufferedinputstream


【解决方案1】:

用途:

BufferedReader in = new BufferedReader(
        new InputStreamReader(getAssets().open(fileName), "UTF-8"));
try {
    for (;;) {
        String line = in.readLine();
        if (line == null)
            break;
        ...
     }
} finally {
    in.close();
}

【讨论】:

  • 乔普谢谢你的回答。我刚刚检查了您的解决方案,但它们都以相同的时间产生:1500 条记录的 2.22 分钟(在 Nexus S ICS 4.0.3 上检查)。至于 BufferedInputStream 它要快得多......有什么建议吗???
  • 所以使用字符比使用字节慢。但有一次,您最好使用 UTF-8 进行 RTL。您可以在打开的 BufferedInputStream 上尝试 InputStreamReader,但我对此表示怀疑。可能 StringTokenizer 也是一个减速因素。
  • 对不起,但不行...InputStreamReader 不接受 BufferedInputStream...只有一个可以是输入(据我所知)
  • InputStreamReader(InputStream in, String encoding) 所以 BufferedInputStream 也应该这样做。