-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
276 lines (247 loc) · 38.5 KB
/
Copy pathindex.html
File metadata and controls
276 lines (247 loc) · 38.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<!DOCTYPE html><html lang="en" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>底层Coder的狗窝 - 实属是摸鱼必备</title><meta name="author" content="CoderChen"><meta name="copyright" content="CoderChen"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="远赴人间惊鸿宴 一睹人间盛世颜">
<meta property="og:type" content="website">
<meta property="og:title" content="底层Coder的狗窝">
<meta property="og:url" content="http://example.com/index.html">
<meta property="og:site_name" content="底层Coder的狗窝">
<meta property="og:description" content="远赴人间惊鸿宴 一睹人间盛世颜">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/avatar.jpg">
<meta property="article:author" content="CoderChen">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/avatar.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="http://example.com/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
noticeOutdate: {"limitDay":365,"position":"top","messagePrev":"It has been","messageNext":"days since the last update, the content of the article may be outdated."},
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: 'Copy successfully',
error: 'Copy error',
noSupport: 'The browser does not support'
},
relativeDate: {
homepage: false,
post: false
},
runtime: 'days',
dateSuffix: {
just: 'Just',
min: 'minutes ago',
hour: 'hours ago',
day: 'days ago',
month: 'months ago'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: true,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: '底层Coder的狗窝',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2023-08-12 14:11:36'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.getCSS = (url,id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><link rel="stylesheet" href="/css/style.css"><meta name="generator" content="Hexo 6.3.0"></head><body><div id="loading-box"><div class="loading-left-bg"></div><div class="loading-right-bg"></div><div class="spinner-box"><div class="configure-border-1"><div class="configure-core"></div></div><div class="configure-border-2"><div class="configure-core"></div></div><div class="loading-word">Loading...</div></div></div><script>(()=>{
const $loadingBox = document.getElementById('loading-box')
const $body = document.body
const preloader = {
endLoading: () => {
$body.style.overflow = ''
$loadingBox.classList.add('loaded')
},
initLoading: () => {
$body.style.overflow = 'hidden'
$loadingBox.classList.remove('loaded')
}
}
preloader.initLoading()
window.addEventListener('load',() => { preloader.endLoading() })
if (false) {
document.addEventListener('pjax:send', () => { preloader.initLoading() })
document.addEventListener('pjax:complete', () => { preloader.endLoading() })
}
})()</script><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">8</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">3</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">4</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page group" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/index_top.jpg')"><nav id="nav"><span id="blog-info"><a href="/" title="底层Coder的狗窝"><span class="site-name">底层Coder的狗窝</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page group" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">底层Coder的狗窝</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://github.com/xxxxx" target="_blank" title="Github"><i class="fab fa-github" style="color: #hdhfbb;"></i></a><a class="social-icon" href="mailto:xxxxxx@gmail.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #000000;"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/2023/08/12/hello-world/" title="Hello World"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg21.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Hello World"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/08/12/hello-world/" title="Hello World">Hello World</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2023-08-12T14:11:10.838Z" title="Created 2023-08-12 14:11:10">2023-08-12</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2023-08-12T14:11:10.838Z" title="Updated 2023-08-12 14:11:10">2023-08-12</time></span></div><div class="content">Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2023/08/07/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/" title="前后端跨域问题"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg19.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="前后端跨域问题"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/08/07/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/" title="前后端跨域问题">前后端跨域问题</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2023-08-07T22:00:00.000Z" title="Created 2023-08-07 22:00:00">2023-08-07</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2023-08-07T22:00:00.000Z" title="Updated 2023-08-07 22:00:00">2023-08-07</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/">日常学习</a></span></div><div class="content">前后端跨域问题什么是前后端跨域问题启动前端工程,工程首页不能正常显示,查看浏览器报错如下
1Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
提示:从http://localhost:8601 访问 http://localhost:63110/system/dictionary/all 被 CORS policy 阻止,因为没有Access-Control-Allow-Origin 头信息。CORS全称是 cross origin resource share 表示跨域资源共享。
从一个地址请求另一个地址,如果协议、主机、端口三者全部一 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2023/08/06/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/Swagger/" title="Swagger"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg06.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Swagger"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/08/06/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/Swagger/" title="Swagger">Swagger</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2023-08-06T18:00:00.000Z" title="Created 2023-08-06 18:00:00">2023-08-06</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2022-08-06T18:00:00.000Z" title="Updated 2022-08-06 18:00:00">2022-08-06</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/">日常学习</a></span></div><div class="content">Swagger什么是Swagger?
OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,并且已经发布并开源在GitHub上:https://github.com/OAI/OpenAPI-Specification
Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,Swagger是一个在线接口文档的生成工具,前后端开发人员依据接口文档进行开发,只要添加Swagger的依赖和配置信息即可使用它
1.引入依赖
123456<!-- Spring Boot 集成 swagger --><dependency> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter</artifactId> <version>1.9.0.RELEASE ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/07/05/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/RPC%E5%B0%8F%E8%AE%B0/" title="RPC小记"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg16.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="RPC小记"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/07/05/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/RPC%E5%B0%8F%E8%AE%B0/" title="RPC小记">RPC小记</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2022-07-05T18:00:00.000Z" title="Created 2022-07-05 18:00:00">2022-07-05</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2022-07-11T15:00:00.000Z" title="Updated 2022-07-11 15:00:00">2022-07-11</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a></span></div><div class="content">RPC小记
源码参考:https://github.com/Snailclimb/guide-rpc-framework
参考文档:https://www.yuque.com/books/share/b7a2512c-6f7a-4afe-9d7e-5936b4c4cab0
动态代理首先看客户端的代码
12345678@RpcScan(basePackage = {"com.richcoder"})public class ClientMain { public static void main(String[] args) throws InterruptedException { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ClientMain.class); HelloController controller = (HelloControll ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/06/18/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/Netty%E4%BC%98%E5%8C%96%E4%B8%8E%E6%BA%90%E7%A0%81/" title="Netty优化与源码"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg15.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Netty优化与源码"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/06/18/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/Netty%E4%BC%98%E5%8C%96%E4%B8%8E%E6%BA%90%E7%A0%81/" title="Netty优化与源码">Netty优化与源码</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2022-06-18T18:00:00.000Z" title="Created 2022-06-18 18:00:00">2022-06-18</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2022-06-23T18:00:00.000Z" title="Updated 2022-06-23 18:00:00">2022-06-23</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a></span></div><div class="content">Netty优化序列化序列化和反序列化主要用在对消息正文的转换上
序列化时,需要将 Java 对象变为要传输的数据
反序列化时,需要将传入的正文数据还原成 Java 对象
目前我们的代码仅支持 Java 自带的序列化和反序列化方式
123456789// 序列化ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(message);byte[] bytes = bos.toByteArray();// 反序列化ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(content));Message message = (Message) ois.readObject();
为了后续能更好的扩展序列化的使用,我们抽象一个 Serializer 接口,专门用于处理序列化的方式
1234567public ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/06/16/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/Netty%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E8%B7%B5/" title="Netty入门与实践"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg02.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Netty入门与实践"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/06/16/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/Netty%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E8%B7%B5/" title="Netty入门与实践">Netty入门与实践</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2022-06-16T18:00:00.000Z" title="Created 2022-06-16 18:00:00">2022-06-16</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2022-06-20T18:00:00.000Z" title="Updated 2022-06-20 18:00:00">2022-06-20</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a></span></div><div class="content">NettyNetty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端
Netty的异步还是基于多路复用的,并没有实现真正意义上的异步IO
Hello world
服务端代码
123456789101112131415161718192021222324252627282930public class HelloServer { public static void main(String[] args) { // 1.启动器 负责组装netty组件 启动服务器 new ServerBootstrap() // 2.BossEventLoop WorkerEventLoop(selector, thread) 组成NioEventLoop .group(new NioEventLoopGroup()) // 3.选择服务器ServerSocketChannel的实现 .ch ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/06/08/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/NIO/" title="Non-blocking I/O"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg01.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Non-blocking I/O"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/06/08/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/NIO/" title="Non-blocking I/O">Non-blocking I/O</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2022-06-08T22:15:00.000Z" title="Created 2022-06-08 22:15:00">2022-06-08</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2022-06-13T16:35:00.000Z" title="Updated 2022-06-13 16:35:00">2022-06-13</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/">网络编程</a></span></div><div class="content">ByteBufferJava NIO系统的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理
ByteBuffer入门案例首先我们创建一个txt文件,其内容为:
11234567890abc
接着编写代码获取文件内容
1234567891011121314151617181920212223242526@Slf4jpublic class TestByteBuffer { public static void main(String[] args) { // 获取Channel 这里获取的是FileChannel try (FileChannel channel = new FileInputStream("data.txt").getChannel()) { // 准备缓冲区 B ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/05/16/Spring/Spring%20%E5%B0%8F%E8%AE%B0/" title="Spring小记"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg13.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Spring小记"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/05/16/Spring/Spring%20%E5%B0%8F%E8%AE%B0/" title="Spring小记">Spring小记</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time class="post-meta-date-created" datetime="2022-05-16T20:00:00.000Z" title="Created 2022-05-16 20:00:00">2022-05-16</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2022-05-16T21:00:00.000Z" title="Updated 2022-05-16 21:00:00">2022-05-16</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E8%AF%BB%E4%B9%A6%E6%97%A5%E8%AE%B0/">读书日记</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Spring%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/">Spring进阶之路</a></span></div><div class="content">Spring 小记摘抄自 Spring揭秘
BeanFactoryProcessor
PropertyPlaceholderConfiguration: 帮助解析xml文件中的数据源配置内容
123456<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}& ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">CoderChen</div><div class="author-info__description">远赴人间惊鸿宴 一睹人间盛世颜</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">8</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">3</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">4</div></a></div><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/xxxxx" target="_blank" title="Github"><i class="fab fa-github" style="color: #hdhfbb;"></i></a><a class="social-icon" href="mailto:xxxxxx@gmail.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #000000;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>Announcement</span></div><div class="announcement_content">Good good study, day day up!</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>Recent Post</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/2023/08/12/hello-world/" title="Hello World"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg21.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Hello World"/></a><div class="content"><a class="title" href="/2023/08/12/hello-world/" title="Hello World">Hello World</a><time datetime="2023-08-12T14:11:10.838Z" title="Created 2023-08-12 14:11:10">2023-08-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2023/08/07/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/" title="前后端跨域问题"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg19.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="前后端跨域问题"/></a><div class="content"><a class="title" href="/2023/08/07/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/" title="前后端跨域问题">前后端跨域问题</a><time datetime="2023-08-07T22:00:00.000Z" title="Created 2023-08-07 22:00:00">2023-08-07</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2023/08/06/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/Swagger/" title="Swagger"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg06.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Swagger"/></a><div class="content"><a class="title" href="/2023/08/06/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/Swagger/" title="Swagger">Swagger</a><time datetime="2023-08-06T18:00:00.000Z" title="Created 2023-08-06 18:00:00">2023-08-06</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/07/05/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/RPC%E5%B0%8F%E8%AE%B0/" title="RPC小记"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg16.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="RPC小记"/></a><div class="content"><a class="title" href="/2022/07/05/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/RPC%E5%B0%8F%E8%AE%B0/" title="RPC小记">RPC小记</a><time datetime="2022-07-05T18:00:00.000Z" title="Created 2022-07-05 18:00:00">2022-07-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/06/18/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/Netty%E4%BC%98%E5%8C%96%E4%B8%8E%E6%BA%90%E7%A0%81/" title="Netty优化与源码"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://imgs-1311962376.cos.ap-nanjing.myqcloud.com/cover_bg15.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Netty优化与源码"/></a><div class="content"><a class="title" href="/2022/06/18/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/Netty%E4%BC%98%E5%8C%96%E4%B8%8E%E6%BA%90%E7%A0%81/" title="Netty优化与源码">Netty优化与源码</a><time datetime="2022-06-18T18:00:00.000Z" title="Created 2022-06-18 18:00:00">2022-06-18</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>Categories</span>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Spring%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/"><span class="card-category-list-name">Spring进阶之路</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/"><span class="card-category-list-name">日常学习</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/"><span class="card-category-list-name">网络编程</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E8%AF%BB%E4%B9%A6%E6%97%A5%E8%AE%B0/"><span class="card-category-list-name">读书日记</span><span class="card-category-list-count">1</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>Tags</span></div><div class="card-tag-cloud"><a href="/tags/Spring/" style="font-size: 1.1em; color: #999">Spring</a> <a href="/tags/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/" style="font-size: 1.5em; color: #99a9bf">网络编程</a> <a href="/tags/%E6%97%A5%E5%B8%B8%E5%AD%A6%E4%B9%A0/" style="font-size: 1.3em; color: #99a1ac">日常学习</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>Archives</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/08/"><span class="card-archive-list-date">August 2023</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/07/"><span class="card-archive-list-date">July 2022</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/06/"><span class="card-archive-list-date">June 2022</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/05/"><span class="card-archive-list-date">May 2022</span><span class="card-archive-list-count">1</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>Info</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">Article :</div><div class="item-count">8</div></div><div class="webinfo-item"><div class="item-name">Run time :</div><div class="item-count" id="runtimeshow" data-publishDate="2023-08-01T00:00:00.000Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">Total Count :</div><div class="item-count">50.1k</div></div><div class="webinfo-item"><div class="item-name">UV :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">PV :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">Last Push :</div><div class="item-count" id="last-push-date" data-lastPushDate="2023-08-12T14:11:36.593Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2023 By CoderChen</div><div class="footer_custom_text">Hi, welcome to my <a target="_blank" rel="noopener" href="https://chenxiniubi666.com/">blog</a>!</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="Switch Between Traditional Chinese And Simplified Chinese">繁</button><button id="darkmode" type="button" title="Switch Between Light And Dark Mode"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="Toggle between single-column and double-column"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="Setting"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="Back To Top"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js"></script><div class="js-pjax"><script>window.typedJSFn = {
init: (str) => {
window.typed = new Typed('#subtitle', Object.assign({
strings: str,
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50,
}, null))
},
run: (subtitleType) => {
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js').then(subtitleType)
}
} else {
subtitleType()
}
}
}
</script><script>function subtitleType () {
if (true) {
typedJSFn.init(["远赴人间惊鸿宴 一睹人间盛世颜"])
} else {
document.getElementById("subtitle").textContent = "远赴人间惊鸿宴 一睹人间盛世颜"
}
}
typedJSFn.run(subtitleType)</script></div><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/activate-power-mode.min.js"></script><script>POWERMODE.colorful = true;
POWERMODE.shake = true;
POWERMODE.mobile = false;
document.body.addEventListener('input', POWERMODE);
</script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>