对 URL 中的数据进行编码以实现高效传输

发布于 2024-09-18 04:48:26 字数 248 浏览 3 评论 0原文

我正在寻找一个可以在 URL 中对数据进行编码的库,因为使用普通的“¶m=value 是”效率低下。

我正在寻找一个库,它将接受一组定义的参数并将其编码为可以安全地通过 HTTP GET 请求发送的格式。我将使用它将跟踪事件从我的播放器发送到后端。

我记得在一些博客文章中读到,Chrome 在将统计信息发送回谷歌服务器时使用一个很好的库来编码数据,该库最近由谷歌开源。唉,我找不到它,而且我不记得它的名字:)

感谢您的帮助, 格言。

I'm searching for a library that can encode data in URL, because using plain "¶m=value is" inefficient.

I'm looking for a library that will accept a defined set of parameters and will encode it into a format that is safe to sent over HTTP GET request. I will be using this to send tracking events from my player to the backend.

I remember reading at some blog post that Chrome is using a nice library to encode data when it send statistics back to google servers, that library was recently open sourced by Google. Alas, I can't find it, and I don't remember it's name :)

Thanks for helping,
Maxim.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

┊风居住的梦幻卍 2024-09-25 04:48:26

你的意思是URL编码吗?然后,您可以使用 java.net.URLEncoder#encode(String,String) 对具有给定编码(如“UTF-8”)的字符串进行 URL 编码。

Do you mean URL encoding? Then you can use java.net.URLEncoder#encode(String,String) for URL encoding a String with a given encoding (like "UTF-8").

花落人断肠 2024-09-25 04:48:26

你是什​​么意思

使用简单的“¶m=value is”效率低下。

在我看来,您使用的任何库都会在幕后简单地使用字符串操作来构建 URL,所以我很难理解为什么您认为使用这样的库会更有效。

您采取了哪些措施来检验您的假设?您需要什么性能水平?

What do you mean by

using plain "¶m=value is" inefficient.

?

It seems to me that any library that you use will, under the covers, be simply using string manipulation to build the URL, so Im struggling to see why you think using such a library will be more efficient.

What measurements have you taken to test your hypothesis? What performance levels do you need?

谜兔 2024-09-25 04:48:26

如果你想要一个快速而肮脏的解决方案,我可以建议这个:

如果:

  • 你的参数集是固定的(或者你可以使用一些短id来指示参数集)

做:

  1. 删除参数名称开销连接全部都在 String、byte[] 或类似的方式中,您可以稍后对其进行解码:) 我应该避免 Java 序列化,因为它包含很多信息。我会尝试一些简单的东西,比如 DataOutputStream.writeType。写起来简单,读起来也简单。
  2. 删除数据冗余压缩它。使用java.util.zip.GZipOutputStream。这就是为什么我更喜欢步骤 1 生成 byte[] 表示!
  3. 使其URL友好。在这里您将增加所需的大小(以字节为单位)。因此,请尝试以最少的开销来完成它。我应该尝试使用 Base64。它是压缩的,因此不是多余的(它使用尽可能少的空间)。因此,唯一的机会是使用不占用太多空间的表示形式。六角形会使尺寸增加一倍。但 Base64 只增加了 33%。

这些步骤并不复杂。

  1. 使用自定义类。也许替代序列化方法所以调用起来更容易。
  2. 使用 java.util.zip.GZipOutput/InputStream。这很简单。
  3. 使用一些 Base64 编码/解码库。也直截了当。

希望有帮助!

If you want a quick and dirty solution I can propose this:

If:

  • your set of params is fixed (or you can indicate the set of params using some short id)

Do:

  1. Remove the param name overhead concatenate all in a String, byte[] or similar in a way you can decode it later :) I should avoid Java Serialization because it includes a lot of info. I'd try something simple like DataOutputStream.writeType. Simple to write and simple to read.
  2. Remove data redundancy Zip it. Use java.util.zip.GZipOutputStream. That's why I prefer the step 1 to generate a byte[] representation!
  3. Make it URL-friendly. Here you'll increase the size in bytes you need. So try to do it with the least overhead. I should try with Base64. It's zipped so it's not redundant (it uses the least space posible). So the only chance is to use a representation that don't use too much space. Hexa would double the size. But Base64 only adds 33%.

Theese steps are not complicated.

  1. Uses a custom class. Maybe the alternative serialization method so it's easier to invoke.
  2. Uses java.util.zip.GZipOutput/InputStream. It's straight-forward.
  3. Uses some Base64 encoding/decoding library. Straigh-forward too.

Hope it helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文