java - Android/Java - 将 DataInputStream 转换为字符串

标签 java android string datainputstream

我目前已与某些中间件建立了连接,通过该连接我将 SQL 查询发送到数据库。

我在将 DataInputStream 转换为可用格式(无论是否是字符串)时遇到了一些麻烦。我看了another StackOverflow question ,但是自从使用以来这并没有解决我的问题

in.readLine();

已“弃用”,无论其含义如何。我需要能够读取中间件的响应。

private class NetworkTask extends AsyncTask<String, Void, Integer> 
{
    protected Integer doInBackground(String... params)
    {
        Message message = networkHandler.obtainMessage();

        String ip = "example ip";
        int port = 1234;

        try 
        {
            InetAddress serverAddr = InetAddress.getByName(ip);
            Log.d("EventBooker", "C: Connecting...");
            Socket socket = new Socket(serverAddr, port);               

            DataInputStream in = new DataInputStream(socket.getInputStream());


            try 
            {
                Log.d("EventBooker", "C: Connected. Sending command.");
                PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                out.println(params[0]);
                networkHandler.sendMessage(message);
                Log.d("EventBooker", "C: Sent.");
            } 
            catch (Exception e) 
            {
                Log.e("EventBooker", "S: Error", e);
            }
            Log.d("EventBooker", "C: Reading...");



            Log.d("EventBooker", "C: Response read, closing.");
            socket.close();
            Log.d("Eventbooker", "C: Closed.");
        } 
        catch (Exception e)
        {
            Log.e("EventBooker", "C: Error", e);
        }
        return 1;
    }
}

最佳答案

将您的 DataInputStream 转换为 BufferedReaderStream,如下所示:

BufferedReader d = new BufferedReader(new InputStreamReader(in));

然后你想获取实际的String,为此你可以这样做:

StringBuffer sb = new StringBuffer();
String s = "";

while((s = d.readLine()) != null) {
    sb.append(s);
}

String data = sb.toString();

//Use data for w/e

简单又简单!

我们不只是将其附加到已经存在的字符串的原因是 Java String 是不可变的,因此每次重新创建 String 对象时,都会产生性能问题。因此StringBuffer!

关于java - Android/Java - 将 DataInputStream 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988859/

相关文章:

android - tesseract v3.03 渲染带有可搜索文本示例的 PDF

string - PowerShell: “… ${_.Name} …”有什么问题?

java - 检查 2 个不同的相等实例(包含示例)

java - R.java 文件消失

java - IDEA 不显示反编译的 Java 类文件的 JavaDoc

java - 关于扩展 ListActivity 的问题

Android:使用 XML 自定义 EditText 布局

php - PHP 中干净且安全的字符串

java - xsd 架构文件 - 显示 elementName 已定义

java - 编译 servlet 给出错误信息