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

Performance 存储未知大小数据和性能的通用解决方案,performance,vector,arraylist,bufferedreader,bufferedinputstream,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字

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

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

InputStream input = new BufferedInputStream (new FileInputStream (file_name_here_with_path));
byte[] = input.read();
如果应用程序读取的内容包含一个RLE字符,那么在打印数组时,您将获得这3个带符号的数字

下一个问题,当前的问题,是为这些信息找到一个合适的容器

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

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

read(byte[]数组,偏移量,长度):与前一个相同,只是我可以让它从我想要的任何点读取,并且可以读取到我想要的时间,不像前一个点,它从开始读取到结束,或者直到抛出某个异常

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

所有4种方法的解决方案都是创建一个新的字节数组,并在插入控制字符时将字节从旧数组移动到新数组。问题可能是,据这里的一位成员哈维尔说,读取方法很慢。我还没有收到确认书,因为我不确定他指的是一本书还是全部3本书。此外,即使我知道在新阵列中需要多少额外的插槽,创建这样大小的新阵列是否是一种良好的做法? 这提醒了我,我的txt文件是200KB的。虽然不多,但我正在寻找正确的做法。通用解决方案

不管怎样,我在寻找替代品。我记得使用向量。是的,它们已经过时了。我不知道为什么,因为我没有创建一个大的应用程序或客户端应用程序,所以我可以使用vectors:P。然而,我认为我应该继续阅读。然后我偶然发现ArrayList,我读了一篇关于它如何表现得更好的帖子


所以。。。会是什么?可能执行速度较慢的读取方法或bufferedReader或过时的向量或快速执行的ArrayList?:P

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


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

您打算将它们作为原始字节(自己处理Unicode)还是作为Unicode字符(由平台处理)?我不确定您的意思。我不明白。但我认为这是第一个。我想自己处理。我只写一个例子。如果我的句子是b c d。当我读到它时,我得到了973298329932100。现在我想把RLE插入中间…B和C之间。所以它变成了97329832-30-128-859932100希望这有帮助。我得到了关于调整大小的部分。但前两行并不清楚,尤其是第一行。读课文怎么样?我是读一行还是用inputstream来读?在你的情况下(考虑到你有特殊的字符),我想说读文件的最好方法是使用FileReader——它保留字符。我不确定InputStream处理特殊字符的能力。是的,这就是我最后要做的。我使用FileReader是因为它更容易检查,但我的输出是bufferedOutputStream,因为我肯定需要以字节的形式写入。又是唐克斯。