存储未知大小的数据和性能的通用解决方案

时间:2014-02-22 22:52:56

标签: performance vector arraylist bufferedreader bufferedinputstream

我有一个包含数字,字母,特殊字符和符号的文本文件。有些行我想在行的开头/中间/末尾插入一个RLE unicode控制字符。

首先,我需要了解如何捕捉并代表RLE。我想到了溪流。我发现RLE需要3个字节-30 -128 -85

InputStream input = new BufferedInputStream (new FileInputStream (file_name_here_with_path));
byte[] = input.read();

如果应用程序读取的内容包含RLE字符,那么在打印数组时,您将获得这3个带符号的数字。

下一个问题,CURRENT PROBLEM,是为这个信息找到一个合适的容器。

input.read():这将返回应用读取的字节。我可以将它保存在一个字节数组中,但除非我知道它的大小,否则我甚至无法创建数组。不,文件大小不是数组的大小,因为我需要根据我设置的某些条件,将这3个字节多次插入到数组中并位于不同的位置。

input.read(byte [] array):这将返回一个表示读取的字节数的int。该参数将保存所有信息。与上述问题相同。固定大小的数组

input.read(byte []数组,偏移量,长度):与之前相同我可以从我想要的任何点读取它,只要我想要的不同于之前的那些从头开始读到的结束或直到抛出一些异常

使用bufferedReader:同样的问题。我读了一行,将它保存在一个字符串中,将字符串转换为字节数组(stringname.getBytes())。固定大小。无法插入。

所有4种方法的解决方案是创建一个新的字节数组,并在插入控制字符时将字节从旧数组移动到新数组。问题,也许是,根据这里的成员,哈维尔,阅读方法很慢。我还没有收到确认,因为我不确定他是否意味着一个特定的读取或全部3.此外,即使我知道在新阵列中需要多少额外的插槽,创建新阵列是不错的做法这么大? 这让我想起,我的txt文件是200KB的顶部。它并不多,但我正在寻找合适的做法。通用解决方案!

无论如何,我寻找替代方案。我记得使用矢量。是的他们已经过时了。我不知道为什么,因为我不是为客户创建一个大应用程序或应用程序然后我可以使用向量:P但是,我认为我应该继续阅读。然后我遇到了ArrayList,我读了一篇关于它如何表现更好的帖子here

那么......会是什么?可能执行缓慢的读取方法或bufferedReader或过时的向量或快速执行的ArrayList? :P

1 个答案:

答案 0 :(得分:0)

向量被更快的ArrayLists取代,但需要注意的是ArrayLists不是线程安全的(但你可以调用Collections的同步方法来否定这一点)并且有一个不同的数据增长方法(每次需要调整大小时) ,ArrayList将大小增加50%,而向量基本上增加一倍)。除此之外,它们几乎是一样的。

根据您的选择,我将使用以这种方式保存Objects(ArrayList)的ArrayList,您可以保留原始元素类型。虽然在这种情况下,您需要跟踪每个索引位置中的元素类型(如果有必要)。