Java:ReadInputStreamReader到字符串-添加额外字符
我使用zip4j在Android中提取zip文件。我想从zip文件中读取一个文件,而不将其保存在某个地方。我已经让它工作,但它会在文件末尾添加额外的字符。额外字符是先前文件的一部分Java:ReadInputStreamReader到字符串-添加额外字符,java,zip,Java,Zip,我使用zip4j在Android中提取zip文件。我想从zip文件中读取一个文件,而不将其保存在某个地方。我已经让它工作,但它会在文件末尾添加额外的字符。额外字符是先前文件的一部分 is = zipFile.getInputStream(fileHeader); InputStreamReader isr = new InputStreamReader(is, "UTF-8"); ArrayList<String> list = n
is = zipFile.getInputStream(fileHeader);
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
ArrayList<String> list = new ArrayList<String>();
char[] buffer = new char[BUFF_SIZE];
while (isr.read(buffer, 0, buffer.length) != -1) {
String ans = new String(buffer);
//strUnzipped += new String(buffer);
strUnzipped += ans;
list.add(ans);
}
is=zipFile.getInputStream(文件头);
InputStreamReader isr=新的InputStreamReader(即“UTF-8”);
ArrayList=新建ArrayList();
char[]buffer=新字符[BUFF_SIZE];
while(isr.read(buffer,0,buffer.length)!=-1){
字符串ans=新字符串(缓冲区);
//strUnzipped+=新字符串(缓冲区);
strUnzipped+=ans;
列表。添加(ans);
}
我使用了列表来查看额外字符的插入位置。它是在最后一行插入的。以及前一行中的额外文本。在某种程度上,这更像是缓冲区没有被清除,它只替换了缓冲区的一部分。buffer变量不知道先前的
读取的
放入了多少个字符。您需要记录读取操作的结果,并将其用于字符串构造:
int charsRead;
while ((charsRead = isr.read(buffer, 0, buffer.length)) != -1) {
String ans = new String(buffer, 0, charsRead);
...
}
然而,这是一个糟糕的阅读方式,大概是文本内容。如果您试图构建包含文件内容的巨大字符串,您可以:
StringBuilder sb = new StringBuilder();
while ((charsRead = isr.read(buffer, 0, buffer.length)) != -1) {
sb.append(buffer, 0, charsRead);
}
strUnzipped = sb.toString();
或者,如果您想要一个列表
,其中每个条目都是文件中的一行,那么:
LineNumberReader lnr = new LineNumberReader(isr);
String inputLine;
while((inputLine = lnr.readLine()) != null) {
list.add(inputLine);
}
常见问题。您没有正确使用
read()
返回的值
while (isr.read(buffer, 0, buffer.length) != -1) {
String ans = new String(buffer);
应该是
int count;
while ((count = isr.read(buffer)) != -1) {
String ans = new String(buffer, 0, count);
这更像是缓冲区没有被清除,它只替换了缓冲区的一部分
这更像是缓冲区停留在建议的读取计数之外。缓冲区不会被“清除”