Java接收text/event-stream格式數(shù)據(jù)的詳細代碼
java接收text/event-stream格式數(shù)據(jù),并且解決接收HTTPS會不是流式輸出問題
前段時間因為要對接語音轉文字接口,對方接口輸出的是text/event-stream返回,返回的是流式輸出,本人在百度找了好久,一直沒有找到關于怎么接收流式返回的文章,可能很多人不清楚流式輸出指的是什么,流式輸出是和對方建立一個長連接,接口方會一直不斷的給我們推送數(shù)據(jù),而不用等待對方接口完全輸出后在把返回值一次性返回。
先貼代碼
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 數(shù)據(jù)
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參數(shù)是url加參數(shù),示例:https://baidu.com?text=12345678response是因為我需要同樣用流式輸出文字給前端,如果你不需要返回給前端,可以不用response參數(shù)。
post請求
public String postEventStream(String urlStr, String json, HttpServletResponse response) {
long statr = System.currentTimeMillis();
log.info("開始請求接口url:{},請求參數(shù){}", 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.寫入?yún)?shù)(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:{},請求參數(shù){},請求開始流式輸出{}", 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格式數(shù)據(jù)的詳細代碼的文章就介紹到這了,更多相關java接收text/event-stream格式數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
hadoop的hdfs文件操作實現(xiàn)上傳文件到hdfs
這篇文章主要介紹了使用hadoop的API對HDFS上的文件訪問,其中包括上傳文件到HDFS上、從HDFS上下載文件和刪除HDFS上的文件,需要的朋友可以參考下2014-03-03
Java中控制多線程順序執(zhí)行的六種實現(xiàn)方案
在多線程編程中,線程的執(zhí)行順序本質上是不確定的,由操作系統(tǒng)調度器決定,但在某些業(yè)務場景中,我們需要確保線程按照特定順序執(zhí)行,所以本文介紹了Java中控制多線程順序執(zhí)行的六種實現(xiàn)方案,需要的朋友可以參考下2025-09-09
IDEA+JRebel實現(xiàn)全自動熱部署的方法步驟
這篇文章主要介紹了IDEA+JRebel實現(xiàn)全自動熱部署的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
Java?CopyOnWriteArrayList源碼超詳細分析
為了將讀取的性能發(fā)揮到極致,jdk中提供了CopyOnWriteArrayList類,下面這篇文章主要給大家介紹了關于java中CopyOnWriteArrayList源碼解析的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11
java8中定時任務最佳實現(xiàn)方式(實現(xiàn)原理)
這篇文章主要介紹了java8中定時任務最佳實現(xiàn)方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-12-12
Mybatis-Plus之ID自動增長的設置實現(xiàn)
本文主要介紹了Mybatis-Plus之ID自動增長的設置實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
使用java swing實現(xiàn)qq登錄界面示例分享
這篇文章主要介紹了使用java swing實現(xiàn)qq登錄界面示例,需要的朋友可以參考下2014-04-04
SpringBoot使用JavaMailSender實現(xiàn)發(fā)送郵件
JavaMailSender是Spring Framework中的一個接口,用于發(fā)送電子郵件,本文主要為大家詳細介紹了SpringBoot如何使用JavaMailSender實現(xiàn)發(fā)送郵件,需要的可以參考下2023-12-12
如何在Spring Boot項目中集成MQTT協(xié)議
本文介紹在SpringBoot中集成MQTT的步驟,包括安裝Broker、添加Eclipse Paho依賴、配置連接參數(shù)、實現(xiàn)消息發(fā)布訂閱、測試接口及注意事項,如唯一客戶端ID、安全措施等,幫助開發(fā)者快速實現(xiàn)物聯(lián)網(wǎng)通信,感興趣的朋友一起看看吧2025-06-06

