【发布时间】:2023-04-02 04:20:01
【问题描述】:
我正在编写一段代码来拆分文件。 我想拆分平面文件(没关系,它工作正常)和 xml 文件。 这个想法是根据要拆分的多个文件进行拆分: 我有一个文件,我想将它拆分为 x 个文件(x 是一个参数)。 我通过获取文件的大小并按要拆分的文件数拆分大小来进行拆分。 然后,我的解决方案是使用 BufferedReader 并像使用它一样
while ((n = reader.read(buffer, 0, buffer.length)) != -1) {
{
主要问题是对于 xml 文件,我不能只拆分它,而是必须根据一个由开始 xml 标记和结束 xml 标记分隔的块来拆分它:
<start tag>
bla bla xml stuff
</end tag>
所以我不能在中间切块。因此,如果当我在一个块的一半时,我的新文件的大小大于我的最大值,我将不得不阅读直到标签的末尾,然后,开始下一个文件。
问题是我有各种各样的情况,搜索结束标记有点困难。 - 块读取文本直到结束标记的中间 - 块读取文本直到结束标记结束,之后不再有其他字符 - ETC 同时有一个循环并读取下一个块。 有时,一个块的结尾与下一个块的开头相连,我有结束 xml 标记。 我希望你能明白。
我的问题是,有没有人有一些算法可以更准确地处理所有特殊情况?
我们的想法是尽快拆分文件。 我不想用lib来把文件当作xml文件,因为块的大小可以更小也可以很大,而且我不知道内存是否足够。或者有一些库不能全部加载到内存中?
非常感谢。
下面是我的 xml 文件的示例;
<?xml version="1.0" encoding="UTF-8" ?>
<myTag service="toto" version="1.5.18" >
<endOfPeriodTradeNotification version="1.5.18">
.............
</endOfPeriodTradeNotification>
<endOfPeriodTradeNotification version="1.5.18">
.............
</endOfPeriodTradeNotification>
<endOfPeriodTradeNotification version="1.5.18">
.............
</endOfPeriodTradeNotification>
<inventoryDate>2009-12-31</inventoryDate>
<!-- reporting date -->
<processingDate>2010-01-29T00:00:00</processingDate>
</myTag>
我忘了一件事:我的xml文件可以全部写在第一行, 所以我猜不出一行有一个标签。
【问题讨论】:
-
标签是嵌套的吗?文档中是否有多个“根”标签?
-
没有。我有一些东西,然后是开始标签,然后是结束标签。它们里面有xml标签(不一样),在最后一个结束标签之后,还有一些东西。
-
开始和结束标记是特定的还是可以是任何标记(由大小大于最大值时定义)?
-
为什么要保留这些块?我的意思是生成的拆分文件无论如何都不是有效的 xml。
-
我看不到以这种方式分割的 xml 文件格式正确的方法。如果原始 xml 大于拆分大小,那么您的拆分文件中至少有两个(第一个和最后一个)保证格式不正确。