Java接收text/event-stream格式数据的详细代码

 更新时间:2023年07月20日 11:01:46   作者:明天我来了  
这篇文章主要介绍了java接收text/event-stream格式数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

java接收text/event-stream格式数据,并且解决接收HTTPS会不是流式输出问题

前段时间因为要对接语音转文字接口,对方接口输出的是text/event-stream返回,返回的是流式输出,本人在百度找了好久,一直没有找到关于怎么接收流式返回的文章,可能很多人不清楚流式输出指的是什么,流式输出是和对方建立一个长连接,接口方会一直不断的给我们推送数据,而不用等待对方接口完全输出后在把返回值一次性返回。

先贴代码

get请求

public String getEventStream(String urlStr, HttpServletResponse response) {
        long statr = System.currentTimeMillis();
        log.info("开始请求接口url:{}", urlStr);
        InputStream is = null;
        StringBuffer bu = new StringBuffer();
        try {
            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();
            is = conn.getInputStream();
            byte[] b = new byte[1024];
            int len = -1;
            long end = System.currentTimeMillis();
            log.info("接口url:{},请求开始流式输出{}", urlStr, end - statr);
            while ((len = is.read(b)) != -1) {
                String line = new String(b, 0, len, "utf-8");
                // 处理 event stream 数据
                response.getWriter().write(line);
                response.getWriter().flush();
                bu.append(line);
            }
        } catch (IOException e) {
            log.error("请求模型接口异常", e);
            throw new BusinessException(ResponseCode.TOPIC_INITIATION_FAILED);
        } finally {
            if (!Objects.isNull(is)) {
                try {
                    //12.关闭输入流
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return bu.toString();
    }

这里的urlStr参数是url加参数,示例:https://baidu.com?text=12345678response是因为我需要同样用流式输出文字给前端,如果你不需要返回给前端,可以不用response参数。

post请求

public String postEventStream(String urlStr, String json, HttpServletResponse response) {
        long statr = System.currentTimeMillis();
        log.info("开始请求接口url:{},请求参数{}", urlStr,json);
        InputStream is = null;
        //11.读取输入流中的返回值
        StringBuffer bu = new StringBuffer();
        try {
            //1.设置URL
            URL url = new URL(urlStr);
            //2.打开URL连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //3.设置请求方式
            conn.setRequestMethod("POST");
            //4.设置Content-Type
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            //5.设置Accept
            conn.setRequestProperty("Accept", "text/event-stream");
            //6.设置DoOutput
            conn.setDoOutput(true);
            //7.设置DoInput
            conn.setDoInput(true);
            //8.获取输出流
            OutputStream os = conn.getOutputStream();
            //9.写入参数(json格式)
            os.write(json.getBytes("utf-8"));
            os.flush();
            os.close();
            //10.获取输入流
            is = conn.getInputStream();
            byte[] bytes = new byte[1024];
            int len = 0;
            long end = System.currentTimeMillis();
            log.info("接口url:{},请求参数{},请求开始流式输出{}", urlStr,json, end - statr);
            while ((len = is.read(bytes)) != -1) {
                String line = new String(bytes, 0, len, "utf-8");
                response.getWriter().write(line);
                response.getWriter().flush();
                bu.append(line);
            }
        } catch (IOException e) {
            log.error("请求模型接口异常", e);
            throw new BusinessException(ResponseCode.TOPIC_INITIATION_FAILED);
        } finally {
            if (!Objects.isNull(is)) {
                try {
                    //12.关闭输入流
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return bu.toString();
    }

第一次写文章,表达不好请谅解,这里使用的jdk版本是1.8,如果对于springboot怎么样返回给前端流式输出有疑问,可以私信问我

到此这篇关于Java接收text/event-stream格式数据的详细代码的文章就介绍到这了,更多相关java接收text/event-stream格式数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • hadoop的hdfs文件操作实现上传文件到hdfs

    hadoop的hdfs文件操作实现上传文件到hdfs

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上、从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下
    2014-03-03
  • Java中控制多线程顺序执行的六种实现方案

    Java中控制多线程顺序执行的六种实现方案

    在多线程编程中,线程的执行顺序本质上是不确定的,由操作系统调度器决定,但在某些业务场景中,我们需要确保线程按照特定顺序执行,所以本文介绍了Java中控制多线程顺序执行的六种实现方案,需要的朋友可以参考下
    2025-09-09
  • IDEA+JRebel实现全自动热部署的方法步骤

    IDEA+JRebel实现全自动热部署的方法步骤

    这篇文章主要介绍了IDEA+JRebel实现全自动热部署的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Java CopyOnWriteArrayList源码超详细分析

    Java CopyOnWriteArrayList源码超详细分析

    为了将读取的性能发挥到极致,jdk中提供了CopyOnWriteArrayList类,下面这篇文章主要给大家介绍了关于java中CopyOnWriteArrayList源码解析的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • java8中定时任务最佳实现方式(实现原理)

    java8中定时任务最佳实现方式(实现原理)

    这篇文章主要介绍了java8中定时任务最佳实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-12-12
  • Mybatis-Plus之ID自动增长的设置实现

    Mybatis-Plus之ID自动增长的设置实现

    本文主要介绍了Mybatis-Plus之ID自动增长的设置实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • java中Scanner类的简单用法分享

    java中Scanner类的简单用法分享

    这篇文章主要介绍了java中Scanner类的简单用法,有需要的朋友可以参考一下
    2014-01-01
  • 使用java swing实现qq登录界面示例分享

    使用java swing实现qq登录界面示例分享

    这篇文章主要介绍了使用java swing实现qq登录界面示例,需要的朋友可以参考下
    2014-04-04
  • SpringBoot使用JavaMailSender实现发送邮件

    SpringBoot使用JavaMailSender实现发送邮件

    JavaMailSender是Spring Framework中的一个接口,用于发送电子邮件,本文主要为大家详细介绍了SpringBoot如何使用JavaMailSender实现发送邮件,需要的可以参考下
    2023-12-12
  • 如何在Spring Boot项目中集成MQTT协议

    如何在Spring Boot项目中集成MQTT协议

    本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加Eclipse Paho依赖、配置连接参数、实现消息发布订阅、测试接口及注意事项,如唯一客户端ID、安全措施等,帮助开发者快速实现物联网通信,感兴趣的朋友一起看看吧
    2025-06-06

最新评论