- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Netty 实现了代理服务器,我在其中解码 HTTP 请求,然后根据它们的路径将这些请求写入传出 channel 。我需要从 HTTP 请求的内容中提取一些信息以供将来处理(基本上,找到“request-id:”形式的子字符串并记录下来以备后用。执行此操作的最佳方法是什么?显然,我可以将 channel 缓冲区的内容转储到字符串中并使用标准的 java 字符串搜索技术,但是在 netty 中是否有一种直接且低开销的方法可以在不创建新字符串的情况下执行此操作?例如,如果有类似ChannelBuffer 的 asCharSequence(CharSet)
方法,我可以只使用 java Pattern/Matcher。
最佳答案
不久前,我在尝试嗅探 ChannelBuffer 中包含的字节的内容类型时遇到了这个问题。
我想到你可以使用:
channelBuffer.toByteBuffer().asCharBuffer()
然后您可以将其传递给正则表达式 Pattern.Matcher,因为这不会重新分配缓冲区,而是它只是被包装并重新表示,就像它一样。但这不起作用,因为 CharBuffer 需要进行 Charset.decoded,这可能与将 ChannelBuffer 转换为字符串一样糟糕。
ChannelBufferIndexFinder 的问题之一是它在搜索一个特定字节时往往效果最好,而当您搜索字符串(或更基本的长度> 1 的字节数组)时,我无法按照我想要的方式让它工作。
我开始研究这个名为 ByteSequenceIndexFinder 的 ChannelBufferIndexFinder 实现这有助于在 ChannelBuffer 中找到实际的字节序列,但它有几个问题:
实际上有一种非标准的替代调用方法可以解决问题 #1,它的工作原理如下:
ChannelBuffer bufferToSearch = ...;
String searchStr = "....";
ByteSequenceIndexFinder finder = new ByteSequenceIndexFinder(searchStr.getBytes());
int startingOffset = finder.findIn(bufferToSearch);
startingOffset 是 channel 缓冲区中匹配字节序列的第一个字节的偏移量。
如果你需要这样的东西,希望它能对你有所帮助。 This是它的测试用例的开始。
关于java - 在 netty ChannelBuffer 中搜索字符串的最佳方法(不创建新字符串)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306383/
我按照 example http server 使用 Netty 编写了一个小型 http 服务器现在我正在尝试使其适应我的需求(一个应该发送 json 的小应用程序)。我首先使用 jackson 手
我想读取 HttpResponse 中包含的 ChannelBuffer 对象中存储的二进制数据。我尝试使用下面的代码从 ChannelBuffer 读取和保存,但它不起作用。读取 channel 缓
将 Netty ChannelBuffer 转换为 String 就像在 ChannelBuffer 上调用 .toString(UTF_8) 一样简单。如何从字符串创建 ChannelBuffer?
Netty 的 ChannelBuffer 类提供了从 ChannelBuffer 读取无符号类型的便捷方法,但是似乎没有任何等效方法可将无符号类型写入 ChannelBuffer。 我觉得我一定错过
我正在使用一些在 netty 之上实现的框架。我正在使用以下两个选项从客户端向服务器发送消息。我想这两个片段应该将相同的字节写入套接字,它在服务器端的行为是不同的。有什么不同? 选项一:好的 Chan
我试过使用这段代码: saver=new FileOutputStream(file); byte c; while ( content.readable() ){ //content is a Ch
我使用 Netty 在 Java 中实现服务器,客户端在 Adobe Flash 中。 当我在缓冲区中发送请求或响应时,我首先写入缓冲区的长度,然后写入数据。我在服务器端使用 ChannelBuf
我有一个已连接客户端的列表,例如 SimpleChannelHandler: List clients = new ArrayList(); 我想向他们发送“Hello”字符串等数据。我正在创建一个新
你好,我有一个 Netty 服务器,它有一个应该接受字符串的处理程序。它似乎只能接收最多 1024 字节的内容。我怎样才能增加缓冲区大小。我已经试过了 bootstrap.setOption("chi
我使用 Netty 实现了代理服务器,我在其中解码 HTTP 请求,然后根据它们的路径将这些请求写入传出 channel 。我需要从 HTTP 请求的内容中提取一些信息以供将来处理(基本上,找到“re
我目前正在使用 Netty 3.5.10.Final 为使用混合字节顺序的二进制协议(protocol)的服务器实现客户端。也就是说,协议(protocol)中有很多情况我必须以大端顺序读/写一组字节
我正在将系统从 Netty 版本 3 迁移到版本 4。我想在处理程序中使用字符串定界符。我如何在 Netty 4 中执行此操作? pipeline.addLast("frameDecoder", ne
我的 netty 项目中有以下简单代码,它期望从上游读取一个整数。管道中没有编码器。 public void messageReceived(ChannelHandlerContext ctx, Me
我是一名优秀的程序员,十分优秀!