原创 Kotlin Collection VS Kotlin Sequence VS Java Stream

一. 集合中的函數式 API 雖然 Kotlin Collection 中的函數式 API 類似於 Java 8 Stream 中的 API。但是 Kotlin 的集合跟 Java 的集合並不一致。 Kolin 的集合分爲可變集合(mut

原创 Mac 下搭建 Clion + OpenCV4.x 的開發環境

搭建 Clion + OpenCV 首先,使用 homebrew 安裝 OpenCV (目前最新的版本是 4.4)。 brew install opencv 然後在 Clion 中配置好本地安裝的 gcc Mac 默認的 gcc 版本

原创 在 Kotlin 的 data class 中使用 MapStruct

一. data class 的 copy() 爲淺拷貝 淺拷貝是按位拷貝對象,它會創建一個新對象,這個對象有着原始對象屬性值的一份精確拷貝。如果屬性是基本類型,拷貝的就是基本類型的值;如果屬性是內存地址(引用類型),拷貝的就是內存地址

原创 基於 Kotlin + Netty 實現一個簡單的 TCP 自定義協議 一. 開發背景 二. 自定義通訊協議 三. TCP 服務端 四. TCP 客戶端 五. 總結

一. 開發背景 我們的項目需要開發一款智能硬件。它由 Web 後臺發送指令到一款桌面端應用程序,再由桌面程序來控制不同的硬件設備實現業務上的操作。從 Web 後臺到桌面端是通過一個 WebSocket 長鏈接來進行維護,而桌面程序到各個硬

原创 如何使用 Ktor 快速開發 Web 項目

一. Ktor 介紹 Ktor 是一個高性能的、基於 Kotlin 的 Web 開發框架,支持 Kotlin Coroutines、DSL 等特性。 Ktor 是一個由 Kotlin 團隊打造的 Web 框架,可用於創建異步、高性能和輕

原创 基於 Kotlin 特性開發的有限狀態機 一. 狀態機 二. 常用的狀態機分類 三. Kotlin 開發的 FSM 四. 應用 五. 總結

一. 狀態機 狀態機是古老的計算機理論,在遊戲開發、嵌入式開發、網絡協議等領域,得到廣泛地使用。 狀態機:它是一個有向圖形,由一組節點和一組相應的轉移函數組成。狀態機通過響應一系列事件而“運行”。每個事件都在屬於“當前” 節點的轉移函數

原创 Kotlin Coroutines Flow 系列(一) Flow 基本使用 一. Kotlin Flow 介紹 二. Flow 基本使用

一. Kotlin Flow 介紹 Flow 庫是在 Kotlin Coroutines 1.3.2 發佈之後新增的庫。 官方文檔給予了一句話簡單的介紹: Flow — cold asynchronous stream with fl

原创 《RxJava 2.x 實戰》 爲什麼要寫這本書 本書的主要內容 如何閱讀本書 致謝

我最近寫了一本書《RxJava 2.x 實戰》。 該書由電子工業出版社出版,目前已經在淘寶、京東、噹噹、亞馬遜等各大電商平臺上進行銷售或預售。 京東自營 https://item.jd.com/12341530.html 天貓電子工業出

原创 Kotlin Coroutines Flow 系列(三) 異常處理 五. Flow 異常處理 六. Flow Lifecycle

五. Flow 異常處理 Flow 可以使用傳統的 try...catch 來捕獲異常: fun main() = runBlocking { flow { emit(1) try {

原创 OpenCV 在 Android 上的應用 一. OpenCV 介紹 二. OpenCV 在 Android 上的配置 三. 例子兩則 四. 總結

一. OpenCV 介紹 OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時

原创 Kotlin Coroutines Flow 系列(四) 線程操作 七. Flow 線程操作

七. Flow 線程操作 7.1 更爲簡化的線程切換 相對於 RxJava 多線程的學習曲線,Flow 對線程的切換友好地多。 在之前的 Kotlin Coroutines Flow 系列(一) Flow 基本使用 一文中曾經介紹過 Fl

原创 Kotlin Coroutines Flow 系列(五) 其他的操作符 八. Flow 其他的操作符 九. Flow VS Reactive Streams

八. Flow 其他的操作符 8.1 Transform operators transform 在使用 transform 操作符時,可以任意多次調用 emit ,這是 transform 跟 map 最大的區別: fun main()

原创 Kotlin Coroutines Flow 系列(二) Flow VS RxJava2 三. Flow VS Sequences 四. Flow VS RxJava

三. Flow VS Sequences 每一個 Flow 其內部是按照順序執行的,這一點跟 Sequences 很類似。 Flow 跟 Sequences 之間的區別是 Flow 不會阻塞主線程的運行,而 Sequences 會阻塞主線

原创 基於 Kotlin Coroutine 實現的 EventBus

一. 背景 這段時間接手了一個比較緊急的項目,它是一個運行在某開發板上的 Android 項目。 該項目採用的架構比較老,例如 RxJava 還在使用 1.x 的版本。起初看到源碼,我內心是拒絕的。(這大半年來,我在使用 C++ 開發桌面

原创 Kotlin + Netty 在 Android 上實現 Socket 的服務端

一. 背景 最近的一個項目:需要使用 Android App 作爲 Socket 的服務端,並且一個端口能夠同時監聽 TCP/Web Socket 協議。 自然而然,項目決定採用 Netty 框架。Netty 服務端在收到客戶端發來的消息後