Java InputStreamReader don';t限制返回长度
我正在学习Java InputStreamReader don';t限制返回长度,java,android,inputstream,Java,Android,Inputstream,我正在学习Java,并且正在浏览Android网站上的示例。我正在获取XML文件的远程内容。我能够获取文件的内容,但是我需要将InputStream转换为字符串 public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { InputStreamReader reader = null; reader = new InputS
Java
,并且正在浏览Android网站上的示例。我正在获取XML
文件的远程内容。我能够获取文件的内容,但是我需要将InputStream
转换为字符串
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
InputStreamReader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
我遇到的问题是,我不希望字符串受到len
var的限制。但是,我对java
不太了解,不知道如何更改它
如何创建没有长度的字符?一般来说,这样的输入字符串没有最大长度是不好的做法,因为可能会耗尽存储它的可用内存
也就是说,您可以忽略len
变量,只需在reader.read(…)
上循环,并将缓冲区附加到字符串中,直到您读取了整个InputStream
,如下所示:
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
String result = "";
InputStreamReader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
while(reader.read(buffer) >= 0)
{
result = result + (new String(buffer));
buffer = new char[len];
}
return result;
}
一般来说,这样的输入字符串没有最大长度是不好的做法,因为可能会耗尽存储它的可用内存
也就是说,您可以忽略len
变量,只需在reader.read(…)
上循环,并将缓冲区附加到字符串中,直到您读取了整个InputStream
,如下所示:
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
String result = "";
InputStreamReader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
while(reader.read(buffer) >= 0)
{
result = result + (new String(buffer));
buffer = new char[len];
}
return result;
}
您可以继续读取该输入流,直到到达末尾(读取返回-1),并使用StringBuilder将每个读取块追加到字符串中。演示如何在没有循环的情况下执行此操作。那么,len
参数的作用是什么呢?您可以继续从该输入流中读取,直到到达末尾(读取返回-1),并使用StringBuilder将每个读取块追加到字符串中。演示了如何在没有循环的情况下执行此操作。那么,len
参数的作用是什么呢?请原谅我对java
缺乏了解,但在研究了一点之后,我不确定如何将缓冲区附加到字符串中。请参阅我的编辑。从reader.read(char[])上的javadoc:将字符读入数组。此方法将阻塞,直到某些输入可用、发生I/O错误或到达流的结尾。参数:cbuf Destination buffer Returns:读取的字符数,或-1(如果已到达流的结尾)抛出:IOException-如果发生I/O错误,您也可以使用StringBuffer
而不是String
,以获得更好的性能,然后执行toString()
当您返回时,请原谅我对java
缺乏了解,但在研究了一下之后,我不确定如何将缓冲区附加到字符串中。请参阅我的编辑。从reader.read(char[])上的javadoc:将字符读入数组。此方法将阻塞,直到某些输入可用、发生I/O错误或到达流的结尾。参数:cbuf Destination buffer Returns:读取的字符数,或-1(如果已到达流的结尾)抛出:IOException-如果发生I/O错误,您也可以使用StringBuffer
而不是String
,以获得更好的性能,然后在返回时执行toString()