Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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/string/5.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中将DataInputStream转换为字符串?_Java_String - Fatal编程技术网

如何在Java中将DataInputStream转换为字符串?

如何在Java中将DataInputStream转换为字符串?,java,string,Java,String,我想问一个关于Java的问题。我已经在Java中使用URLConnection来检索DataInputStream。我想将DataInputStream转换成Java中的字符串变量。我该怎么办?有人能帮我吗。多谢各位 以下是我的代码: URL data = new URL("http://google.com"); URLConnection dataConnection = data.openConnection(); DataInputStream dis = new DataInputSt

我想问一个关于Java的问题。我已经在Java中使用URLConnection来检索DataInputStream。我想将DataInputStream转换成Java中的字符串变量。我该怎么办?有人能帮我吗。多谢各位

以下是我的代码:

URL data = new URL("http://google.com");
URLConnection dataConnection = data.openConnection();
DataInputStream dis = new DataInputStream(dataConnection.getInputStream());
String data_string;
// convent the DataInputStream to the String
您可以使用
IOUtils.toString(dataConnection.getInputStream(),encoding)
来实现您的目标


DataInputStream
不用于您想要的内容-即,您希望以
String

的形式读取网站内容如果您希望从通用URL(例如
www.google.com
)读取数据,您可能根本不想使用
DataInputStream
。相反,创建一个
BufferedReader
并使用
readLine()
方法逐行读取。使用
URLConnection.getContentType()
字段查找内容的字符集(为了正确创建读卡器,您将需要该字符集)

例如:

URL data = new URL("http://google.com");
URLConnection dataConnection = data.openConnection();

// Find out charset, default to ISO-8859-1 if unknown
String charset = "ISO-8859-1";
String contentType = dataConnection.getContentType();
if (contentType != null) {
    int pos = contentType.indexOf("charset=");
    if (pos != -1) {
        charset = contentType.substring(pos + "charset=".length());
    }
}

// Create reader and read string data
BufferedReader r = new BufferedReader(
        new InputStreamReader(dataConnection.getInputStream(), charset));
String content = "";
String line;
while ((line = r.readLine()) != null) {
    content += line + "\n";
}

这就是你想要的

您想将DataInputString转换为字符串,或者想从DataInputString?@org.life.java读取字符串,谢谢您的回复。我想将DataInputStream转换为字符串,如(data_string=dis;)。顺便说一下,我想这是另一个问题,所以我发布了一个新问题,不是我问的旧问题。谢谢。:-)要转换,只需说
String str=dis.toString(),但它将为您提供对象的字符串表示,我不明白您为什么需要这个?或者您想在这里阅读google.com的内容?@org.life.java,谢谢您的回复。google只是一个例子,我想问,“给你对象的字符串表示法”是什么意思?对象有一个方法toString,返回对象的字符串表示法;I don’我不认为你在寻找这个,你想通过将dis转换为字符串来做什么,请用示例解释。@org.life.java,谢谢你的回答。我认为对这个问题有一些误解。在“System.out.println(inputLine);”之后,inputLine变为“null”值,我需要inputLine=“@org.life.java,这是一个很大的帮助。非常感谢您,很抱歉耽误了您的时间。我认为这不可行。
readUTF()
希望字符串数据以特定的方式存储(请参阅)。如果您试图从任意URL读取内容,则不会出现这种情况。@Grodriguez感谢您让我知道这一点。我已将其更改回readLine,我知道它已被删除。如果您使用
DataInputStream.readLine(),其他解决方案已经存在,如bozho的解决方案
,如果您正在访问的URL的内容编码与普通ASCII不同,则您的解决方案将无法正常工作。这就是为什么不推荐使用
readLine
方法的原因。请参阅我对同一问题的回答,以了解在考虑内容编码的情况下读取URL内容的方法,而无需诉诸任何external库。这不考虑您正在访问的URL的内容编码。您应该使用两个参数版本的
IOUtils.toString
方法来显式指定编码。@Grodriguez或使用
InputStreamReader
。我添加了编码,这确实是一个很好的做法。即使您通过了de>InputStreamReader
相反,在创建
InputStreamReader
时,您仍然需要指定编码,否则您将遇到相同的问题(将使用默认平台编码,该编码可能与URL内容的编码匹配,也可能与URL内容的编码不匹配)@Grodriguez这就是我所说的
InputStreamReader
建议的意思。(顺便说一句,我想下一票可以删除)ContentEncoding头真的包含字符集吗?根据它应该包含例如gzip。你应该看看字符集。
import java.net.*;
import java.io.*;

class ConnectionTest {
    public static void main(String[] args) {
        try {
            URL google = new URL("http://www.google.com/");
            URLConnection googleConnection = google.openConnection();
            DataInputStream dis = new DataInputStream(googleConnection.getInputStream());
            StringBuffer inputLine = new StringBuffer();
            String tmp; 
            while ((tmp = dis.readLine()) != null) {
                inputLine.append(tmp);
                System.out.println(tmp);
            }
            //use inputLine.toString(); here it would have whole source
            dis.close();
        } catch (MalformedURLException me) {
            System.out.println("MalformedURLException: " + me);
        } catch (IOException ioe) {
            System.out.println("IOException: " + ioe);
        }
    }
}