Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java InputStreamReader don';t限制返回长度_Java_Android_Inputstream - Fatal编程技术网

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()