这是我的代码
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():从输入流中读取下一个字节的数据。
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子校验码 新产出