JS中实现Java的getBytes()方法

 function strToUtf8Bytes(str) {
  const utf8 = [];
  for (let ii = 0; ii < str.length; ii++) {
    let charCode = str.charCodeAt(ii);
    if (charCode < 0x80) utf8.push(charCode);
    else if (charCode < 0x800) {
      utf8.push(0xc0 | (charCode >> 6), 0x80 | (charCode & 0x3f));
    } else if (charCode < 0xd800 || charCode >= 0xe000) {
      utf8.push(0xe0 | (charCode >> 12), 0x80 | ((charCode >> 6) & 0x3f), 0x80 | (charCode & 0x3f));
    } else {
      ii++;
      // Surrogate pair:
      // UTF-16 encodes 0x10000-0x10FFFF by subtracting 0x10000 and
      // splitting the 20 bits of 0x0-0xFFFFF into two halves
      charCode = 0x10000 + (((charCode & 0x3ff) << 10) | (str.charCodeAt(ii) & 0x3ff));
      utf8.push(
        0xf0 | (charCode >> 18),
        0x80 | ((charCode >> 12) & 0x3f),
        0x80 | ((charCode >> 6) & 0x3f),
        0x80 | (charCode & 0x3f),
      );
    }
  }
  //兼容汉字,ASCII码表最大的值为127,大于127的值为特殊字符
  for(let jj=0;jj<utf8.length;jj++){
	  var code = utf8[jj];
	  if(code>127){
		  utf8[jj] = code - 256;
	  }
  }
  return utf8;
}

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Server-Sent Events (SSE) 是一种实时的 Web 通信技术,它允许服务器向浏览器推送数据,而无需客户端主动发起请求。在 Java 实现 SSE,通常涉及到以下几个步骤: 1. **服务器端处理**: - 创建一个 HTTP 操作(通常是 GET 请求)。 - 在响应头设置 `Content-Type: text/event-stream` 和 `Cache-Control: no-cache`,告诉浏览器这是一个 SSE 流。 - 使用循环或流式处理机制,每次有新数据时发送一个事件(Event: ...)。 - 使用分隔符(如 `\n\n` 或 `\r\n\r\n`)来标记每个事件。 ```java import java.io.OutputStream; import jakarta.servlet.http.HttpServletResponse; public void handleSseRequest(HttpServletRequest request, HttpServletResponse response) { response.setHeader("Content-Type", "text/event-stream;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); OutputStream outputStream = response.getOutputStream(); try { outputStream.write("event: data\n".getBytes()); // 开始事件 outputStream.write(("data: " + "New message from server").getBytes()); outputStream.write("\n\n".getBytes()); // 结束当前事件并换行 // 模拟持续推送,这里可以用线程或者定时器实现 while (true) { // 每隔一段时间更新数据并发送 Thread.sleep(2000); outputStream.write(("data: " + "Another update").getBytes()); outputStream.write("\n\n".getBytes()); } } finally { outputStream.close(); } } ``` 2. **客户端接收**: - JavaScript ,可以使用 `EventSource` 对象来监听服务器的数据推送。 - 创建一个新的 `EventSource` 对象,并在 `onmessage` 事件处理接收到的数据。 ```javascript var source = new EventSource('/sse'); source.onmessage = function(event) { var data = event.data; console.log('Received:', data); }; ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值