原创 class文件格式的理解

以前瞭解JVM相關知識時,對類文件結構僅僅是一瞥而過,並未仔細去深究,實在不應該。於是最近找了個閒暇,來仔細理解一下。 先不談各種定義,就現象而言,class文件只是開發者編譯java文件產生的產物,且這個產物是供JVM閱讀的。

原创 使用Gson解析錯誤json數據

在拉取數據時,有時候會遇到一些錯誤數據導致整張表都無法正常存儲的情況,比如這種錯誤: com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: In

原创 關於Netty精簡

netty使用的jar包對於部分平臺來說太大了,所以拿到源碼後自行精簡了一下。適用於安卓端。 保留目錄爲: 最終生成jar包: 可自行測試,基礎的TCP/UDP等通訊功能保留,去除了大量PooledBuffer及工具類。 鏈接

原创 關於TEA加密算法在Java中遇到的問題

問題是在Java中int的最高位是正負標誌位,涉及到最高位的位運算便有可能出錯。 兩段測試代碼,先看Java的: public static void testTEA(){ int[] datas = {0x01234567

原创 ByteBuffer注意事項

因爲使用通信框架不同的緣故,bytebuffer這種東西在每個框架中都有可能是不同的,比如在Mina中叫IoBuffer,在Netty中叫ByteBuf,雖然叫法不同,但其實用法相似。 有時候爲了方便,就直接使用java內置的By

原创 貪婪算法

複習一下貪婪算法。 個人的記憶和理解是:每一步都選擇局部最優解。貪婪算法只是一種求得“近似”最優解的算法,並不能保證最終結果是最優解。 這裏模仿《算法圖解》中的廣播覆蓋問題模仿提出一個問題。(上述鏈接提取碼爲q0m8) 題:現有9

原创 關於RecyclerView的notifyDataSetChanged

在很久以前,總覺得ListView的notifyDataSetChanged之類的方法很神奇,數據更新後,調用一下,視圖就變了… 不過自從知道觀察者模式以後就沒感覺那麼神奇了,反而對View的繪製測量一系列精細的計算歎爲觀止—雖然

原创 關於Netty的BlockingOperationException問題

記錄遇到的一個死鎖異常。出現的場景是在客戶端斷線重連時。 重連時代碼類似這樣: private void reconnect() { if (bootstrap == null) throw new IllegalAr

原创 RecyclerView二級列表

最近正好有做到二級列表,就記載一下怎樣使用RecyclerView做二級列表吧。 效果大概就是這個樣子,可以湊合用,主要是弄清楚大概原理,這樣就知道步驟。代碼地址在最下面。 需要了解 我們知道,寫一個RecyclerView,需

原创 Netty的UDP廣播發送與接收

想要的邏輯是這樣的: A向局域網內發送廣播消息messageA; B收到了messageA並直接使用既有的session或channel把需要回復的消息write回來就行了。 自己嘗試了一下,記載一下使用中較爲便利的寫法。 客戶端

原创 Java中的去重

最近都在匡扶漢室,無心寫代碼。 說到去重,往往會想到filter、distinct之類的關鍵字。 如果可以使用庫的話,比如RxJava2中: Observable.just("aa", "bb", "ccc", "

原创 Python轉jar爲base64

一個工具,作用是將java打出的jar包轉成Android可用的jar包,再轉爲base64編碼。 前提: 本地有python開發環境 本地有dx.bat,並如py一樣配置到環境變量中 因爲將普通jar轉成Android可用的

原创 算法--冒泡排序、選擇排序、插入排序

最近沒啥好寫的,來複習下初級算法吧。 首先重溫一下一些算法中的概念: 時間複雜度O(n^2),代表算法所需運行時間,也是算法需要運行的指令數量,是一個最低上界值,n代表數據規模 空間複雜度O(1),代表算法所需內存空間,一般算法

原创 JNI極簡使用

JNI不必多說,是Java與Native的橋樑,也許不經常使用,但必須會使用。 流程也是一致的: 創建帶有native方法的Java類 使用javah編譯上面的類,得到.h文件 拷貝頭文件部分內容,寫成.c文件 制定makefi

原创 關於DexClassLoader

安卓的動態加載必備知識之一,DexClassLoader。 DexClassLoader當然也是一種ClassLoader,但本身屬於顧名思義是用來加載Dex文件的,是安卓系統獨有的一種類加載器。 基礎概念 在此之前可以稍微回顧下