{"id":308,"date":"2023-12-11T11:26:13","date_gmt":"2023-12-11T03:26:13","guid":{"rendered":"https:\/\/chenyl.fun\/?post_type=docs&#038;p=308"},"modified":"2023-12-11T11:26:13","modified_gmt":"2023-12-11T03:26:13","slug":"%e6%b5%81%e5%bc%8f%e5%93%8d%e5%ba%94%e7%9a%84java%e7%ab%af%e5%92%8chtml%e7%ab%afdemo","status":"publish","type":"docs","link":"https:\/\/chenyl.fun\/?docs=%e6%b5%81%e5%bc%8f%e5%93%8d%e5%ba%94%e7%9a%84java%e7%ab%af%e5%92%8chtml%e7%ab%afdemo","title":{"rendered":"\u6d41\u5f0f\u54cd\u5e94\u7684java\u7aef\u548chtml\u7aefdemo"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import java.io.IOException;\nimport java.io.OutputStream;\nimport java.net.InetSocketAddress;\nimport com.sun.net.httpserver.*;\n \npublic class StreamingServer {\n    public static void main(String[] args) throws IOException {\n        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);\n \n        \/\/ \u8bbe\u7f6e\u8bf7\u6c42\u5904\u7406\u5668\n        server.createContext(\"\/streaming\", new StreamingHandler());\n \n        \/\/ \u542f\u52a8\u670d\u52a1\u5668\n        server.start();\n        System.out.println(\"Server started on port 8000\");\n    }\n \n    static class StreamingHandler implements HttpHandler {\n        @Override\n        public void handle(HttpExchange exchange) throws IOException {\n            \/\/ \u8bbe\u7f6e\u54cd\u5e94\u5934\uff0c\u58f0\u660e\u4e3a\u6d41\u5f0f\u4f20\u8f93\n            exchange.getResponseHeaders().add(\"Content-Type\", \"application\/octet-stream\");\n \n            \/\/ \u5f00\u59cb\u53d1\u9001\u54cd\u5e94\u6570\u636e\n            OutputStream outputStream = exchange.getResponseBody();\n            for (int i = 0; i &lt; 10; i++) {\n                byte[] data = generateData(); \/\/ \u751f\u6210\u8981\u53d1\u9001\u7684\u6570\u636e\n                outputStream.write(data);\n                outputStream.flush();\n \n                try {\n                    Thread.sleep(1000); \/\/ \u6bcf\u79d2\u53d1\u9001\u4e00\u6b21\u6570\u636e\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                }\n            }\n \n            outputStream.close();\n        }\n \n        private byte[] generateData() {\n            \/\/ \u751f\u6210\u6570\u636e\u7684\u903b\u8f91\uff0c\u6b64\u5904\u4ec5\u8fd4\u56de\u56fa\u5b9a\u957f\u5ea6\u7684\u6570\u636e\n            return new byte[1024];\n        }\n    }\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html>\n&lt;html>\n&lt;head>\n  &lt;title>Streaming Test&lt;\/title>\n&lt;\/head>\n&lt;body>\n  &lt;div id=\"output\">&lt;\/div>\n\n  &lt;script>\n    var outputDiv = document.getElementById(\"output\");\n    var xhr = new XMLHttpRequest();\n\n    \/\/ \u76d1\u542c\u6570\u636e\u5230\u8fbe\u4e8b\u4ef6\n    xhr.onprogress = function(event) {\n      if (event.lengthComputable) {\n        var percentComplete = Math.floor((event.loaded \/ event.total) * 100);\n        outputDiv.innerHTML = \"Progress: \" + percentComplete + \"%\";\n      } else {\n        outputDiv.innerHTML = \"Receiving data...\";\n      }\n    };\n\n    \/\/ \u63a5\u6536\u5b8c\u6574\u54cd\u5e94\u540e\u5904\u7406\u6570\u636e\n    xhr.onload = function() {\n      outputDiv.innerHTML = \"Streamed response received.\";\n      \/\/ \u8fd9\u91cc\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u9700\u6c42\u5904\u7406\u63a5\u6536\u5230\u7684\u6570\u636e\n    };\n\n    xhr.open(\"GET\", \"http:\/\/localhost:8000\/streaming\", true);\n    xhr.send();\n  &lt;\/script>\n&lt;\/body>\n&lt;\/html><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"doc_category":[27],"doc_tag":[],"_links":{"self":[{"href":"https:\/\/chenyl.fun\/index.php?rest_route=\/wp\/v2\/docs\/308"}],"collection":[{"href":"https:\/\/chenyl.fun\/index.php?rest_route=\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/chenyl.fun\/index.php?rest_route=\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/chenyl.fun\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chenyl.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=308"}],"version-history":[{"count":1,"href":"https:\/\/chenyl.fun\/index.php?rest_route=\/wp\/v2\/docs\/308\/revisions"}],"predecessor-version":[{"id":309,"href":"https:\/\/chenyl.fun\/index.php?rest_route=\/wp\/v2\/docs\/308\/revisions\/309"}],"wp:attachment":[{"href":"https:\/\/chenyl.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=308"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/chenyl.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fdoc_category&post=308"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/chenyl.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fdoc_tag&post=308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}