Java URL自定义私有网络协议

时间:2021-05-19

——声明,脑残人士远离,本博客的核心不是if-else+前缀,而是如何通过URL协议处理框架定义私有协议

URI与URL的区别

URI (uniform resource identifier)统一资源标志符;URL(uniform resource location )统一资源定位符(或统一资源定位器);URI是一个相对来说更广泛的概念,URL是URI的一种,是URI命名机制的一个子集,可以说URI是抽象的,而具体要使用URL来定位资源。URI指向的一般不是物理资源路径,而是整个系统中的映射后的资源标识符。URL是Internet上用来描述信息资源的字符串,主要用在各种/blog/830644 line = line.substring(0, line.length()-"\r\n0\r\n\r\n".length()); System.out.println(line); break; }else{ System.out.println(line); } } pw.close(); stream.close();

运行结果

结果说明,协议确实定义成功了


当然,如上数据解析不符合我们的要求,因为是chunked编码信息,如何解析符合要求有,请移步

HTTP Chunked数据编码与解析算法

五.后话,自定义mineType解析器

java中提供了ContentHandlerFactory,用来解析mineType,我们这里制定我们自己的解析器,当然,JDK中提供的更丰富,这里所做的只是为了符合特殊需求

public class EchoContentHandler extends ContentHandler {public Object getContent(URLConnection connection) throws IOException {InputStream in = connection.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));return br.readLine();}public Object getContent(URLConnection connection, Class[] classes) throws IOException {InputStream in = connection.getInputStream();for (int i = 0; i < classes.length; i++) {if (classes[i] == InputStream.class)return in;else if (classes[i] == String.class)return getContent(connection);}return null;}}

用法很简单

URLConnection.setContentHandlerFactory(new EchoContentHandlerFactory());

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章