在Java中读取inputstream的第一部分

在Java中读取inputstream的第一部分,java,file,Java,File,我有一个从URLConnection读取的XML文件。文件随着时间的推移而增长。我想读文件的前100k,今天文件是1.3MB。然后我想解析我读过的部分。 我该怎么做呢?(从头开始) (从头开始) 据我所知,您不仅对100k的流感兴趣,而且对100k的流感兴趣,您可以从中提取所需的数据。这意味着按照Peter的建议使用100k是行不通的,因为它可能会导致XML格式不正确 相反,我建议使用StAX解析器,它将使您能够直接从流中读取和解析XML,并在达到100k(或接近100k)限制时停止 有关更多信

我有一个从URLConnection读取的XML文件。文件随着时间的推移而增长。我想读文件的前100k,今天文件是1.3MB。然后我想解析我读过的部分。 我该怎么做呢?

(从头开始)

(从头开始)


据我所知,您不仅对100k的流感兴趣,而且对100k的流感兴趣,您可以从中提取所需的数据。这意味着按照Peter的建议使用100k是行不通的,因为它可能会导致XML格式不正确

相反,我建议使用StAX解析器,它将使您能够直接从流中读取和解析XML,并在达到100k(或接近100k)限制时停止

有关更多信息,请查看接口(及其用法示例)。例如,您可以循环,直到到达名为“result”的
START\u元素
,然后使用方法
getTextCharacters(int sourceStart,char[]target,int targetStart,int length)
指定100k作为缓冲区大小


正如您所提到的,Android目前提供StAX解析器。不过,它也有类似的功能。

据我所知,您不仅对100k的流感兴趣,而且对100k的流感兴趣,您可以从中提取所需的数据。这意味着按照Peter的建议使用100k是行不通的,因为它可能会导致XML格式不正确

相反,我建议使用StAX解析器,它将使您能够直接从流中读取和解析XML,并在达到100k(或接近100k)限制时停止

有关更多信息,请查看接口(及其用法示例)。例如,您可以循环,直到到达名为“result”的
START\u元素
,然后使用方法
getTextCharacters(int sourceStart,char[]target,int targetStart,int length)
指定100k作为缓冲区大小


正如您所提到的,Android目前提供StAX解析器。但是,它确实具有类似的功能。

您确定文件的前100k包含您想要的内容吗?另外,为什么不从
URLConnection
读取100k而不是整个XML呢?您确定文件的前100k包含您想要的内容吗?另外,为什么不从
URLConnection
?+1:read()只读取一个字节,而不读取整个XML呢。也许DataInputStream.readFully()是一个更好的选择。+1:read()只保证读取一个字节。也许DataInputStream.readFully()是一个更好的选择。我想读取一个通过HTTP下载的包含0-3000个元素(其中包含更多元素)的XML文件的流。我只想读取前20个元素,然后应该删除该流。您如何确定。。。是否包含在前100k中?或者你的目标是在标签之间读取100k的字符数据?我知道文件的结构:所以看起来你只想在标签之间读取100k的文本数据。在这种情况下,您可以使用XMLStreamReader,循环直到到达名为“result”的START_元素,然后使用方法getTextCharacters(int sourceStart,char[]target,int targetStart,int length)指定100k作为缓冲区大小。我想读取通过HTTP下载的XML文件包含0-3000个元素(其中包含更多元素)的流我只想读前20个元素,然后流应该被删除。你怎么能确定。。。是否包含在前100k中?或者你的目标是在标签之间读取100k的字符数据?我知道文件的结构:所以看起来你只想在标签之间读取100k的文本数据。在这种情况下,您可以使用XMLStreamReader,循环直到到达名为“result”的START_元素,然后使用方法getTextCharacters(int sourceStart,char[]target,int targetStart,int length)将100k指定为缓冲区大小。
int length = 100*1024;
byte[] buf = new byte[length];
urlConnection.getInputStream().read(buf,0,length);
StringBufferInputStream in = new StringBufferInputStream(new String(buf));
new SAXParser().parse(in,myHandler);