当前位置: 首页 > 知识库问答 >
问题:

从套接字intputStream read()返回的Int中获取字节

孙佐
2023-03-14

这是我的代码

private static Packet readPacket(InputStream is) throws Exception
{
    int ch;
    Packet p = new Packet();

    String type = "";
    while((ch = is.read()) != 44) //44 is the "," in ISO-8859-1 codification
    {
        if(ch == -1)
            throw new IOException("EOF");
        type += new String(ch, "ISO-8859-1"); //<----DOES NOT COMPILE
    }
    ...
}

字符串构造函数不接收int,只接收字节数组.我看了文件上面说

read():从输入流中读取下一个字节的数据。

共有1个答案

司空丰
2023-03-14

String构造函数采用char[](数组)

type += new String(new byte[] { (byte) ch }, "ISO-8859-1");

顺便说一句。使用StringBuilder作为类型并使用它的append-methods会更好。它更快,也更好地显示了意图:

private static Packet readPacket(InputStream is) throws Exception {
    int ch;
    Packet p = new Packet();

    StringBuilder type = new StringBuilder();
    while((ch = is.read()) != 44) {
        if(ch == -1)
            throw new IOException("EOF");
        // NOTE: conversion from byte to char here is iffy, this works for ISO8859-1/US-ASCII
        // but fails horribly for UTF etc.
        type.append((char) ch);
    }
    String data = type.toString();
    ...
}

此外,为了使其更加灵活(例如,使用其他字符编码),您的方法最好使用一个InputStreamReader,它可以为您处理从字节到字符的转换(看看InputStreamReader(InputStream,Charset)构造函数的javadoc)。

 类似资料:
  • 问题内容: 从堆栈溢出的其他帖子中应该可以正常工作 但由于某种原因,它只是挂在()上而从不打印。我知道对www.cnn.com的请求将对数据进行分块,但我至少应该从中读取一些信息,对吗? PS我知道这是不是做到这一点的最好办法,而且有像库和在那里,但我不能使用那些为这个项目(这是学校)。我必须使用图书馆 问题答案: 您忘记在请求行之后发送空白行: 此外,HTTP 1.1指定您应添加HTTP 1.1

  • 问题内容: 如何将in中返回的整数转换为实际字符值,然后将其附加到String?将返回一个代表字读整数。当我这样做时,它不会将实际字符附加到字符串中。而是将整数表示形式本身附加到String。 我应该怎么做才能读取实际数据? 问题答案: 刚投到一个。 另外,不要使用过一个在一个循环。它是O(n ^ 2),而不是预期的O(n)。使用或代替。

  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

  • **服务器** **客户** 并且我运行它,ip是环回(127.0.0.1),端口是7755。 客户端套接字的对等ip:127.0.0.1 客户端套接字的对等端口6311 -1 0 0 0 我的问题是,如果监听(服务器)套接字只处理客户端的连接,那么它的对等端不应该存在?那个错误的IP和端口是什么?只是垃圾值?

  • 问题内容: 我知道read()是一个阻塞调用,除非我使套接字成为非阻塞。因此,我希望请求4K数据的read()调用应返回正值(读取的字节数)或错误时返回-1(客户端可能重置连接等)。我的问题是:在任何情况下read()都可以返回“ 0”吗? 我这样处理read(): 如果read()返回零,则此代码炸弹轰炸,我知道如何修复它。但是read()是否有可能返回零? 问题答案: 当一侧的TCP连接关闭时

  • 我试图从与参数值相连的子域列表中执行,但得到一个错误。我不确定循环是否正常工作,第一次尝试只是不是一个有效的子域+域。或者它根本不起作用? 误差 代码 新def子校验码 新产出