摘要:但是將導入工程后,在使用時會出現等錯誤消息。初步認為是與自帶的沖突。再運行工程,這個錯誤不再出現了,奇跡般的沒問題了。我的理解是這樣,不知道對不對,歡迎大俠指正。工程中下默認的是,而則應該是。所以按照該文的解決方法,更改就好了。
JSON解析庫有很多,諸如Jackson,Json-lib,org.json,Gson和fastjson等,但是fastjson以其解析速度最快而脫穎而出。詳細的測試地址如下:
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
fastjson是國內alibaba公司的wenshao開發的,項目Git地址:
https://github.com/alibaba/fastjson
今天測試了下發現fastjson挺好用,比Android自帶的org.json庫要好用多了。當然我沒有對fastjson的性能進行測試,只是因為Android自帶的不太好。
在普通的java項目下,只需要導入fastjson.jar就可以,無需依賴其他包,這一點相比json-lib要好多,json-lib依賴五六個包。但是將fastjson.jar導入Android工程后,在使用時會出現 java.lang.NoClassDefFoundError:can"t find com.alibaba.fastjson.JSON等錯誤消息。
初步認為是與Android自帶的org.json沖突。于是Build Path->Configure Build Path->Order And Export下將fastjson.jar上調至Android xx.jar上(xx為android 版本號)。再運行工程,這個錯誤不再出現了,奇跡般的沒問題了。
然后現在再調整fastjson.jar和Android.jar順序也不會出現can"t not find com.alibaba.fastjson的錯誤,不知道為何,繼續看。
文章Java虛擬機類加載順序講解了java 虛擬機加載class和jar包的順序。
bootstrap classloader ->extension classloader->system classloader
其中bootstrap引導類加載器;
extension classloader擴展類加載器,它負責加載JRE的擴展目錄(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系統屬性指定的)中JAR的類包;
system classloader系統(也稱為應用)類加載器,它負責在JVM被啟動時,加載來自在命令java中的-classpath或者java.class.path系統屬性或者 CLASSPATH操作系統屬性所指定的JAR類包和類路徑.
該文中還有一句話是這么說的,應該能解決我們的疑惑:
“此外類加載還采用了cache機制,也就是如果 cache中保存了這個Class就直接返回它,如果沒有才從文件中讀取和轉換成Class,并存入cache,這就是為什么我們修改了Class但是必須重新啟動JVM才能生效的原因。”
我想應該是Android虛擬機中已經有了fastjson的cache了,所以導致如何更改項目的fastjson.jar和Android.jar順序都不會有任何反應。我的理解是這樣,不知道對不對,歡迎大俠指正。
解釋到這里,也解決了我另外一個疑問,就是在Android的工程中新建一個java類,并生成main方法,然后Run->Java Application. 結果會出現如下的錯誤:
# # A fatal error has been detected by the Java Runtime Environment: # # Internal Error (classFileParser.cpp:3494), pid=5940, tid=5632 # Error: ShouldNotReachHere()
這個問題的產生就是和bootstrap classloard 有關了,文件上右鍵Run As->Run Configuration選擇Java Application下的這個Java類,然后選擇右側的Classpath標簽頁下有兩個目錄,分別是Bootstrap Entries 和 User Entries。
Android工程中Bootsrap下默認的是Android Classpath Container,而Java則應該是JRE System Library。所以按照該文Error: ShouldNotReachHere()的解決方法,更改就好了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64035.html
摘要:某年某月的某一天,本汪在某個奇葩的公司,接手了某個奇葩的項目,遇到了一些奇葩的事情,就掉進關于做轉換時,那些關于首字符大小寫的坑。坑首字符小寫,第二個字符大寫的鍵名這個坑與相關,嚴格來說,應該是挖的坑。 某年某月的某一天,本汪在某個奇葩的公司,接手了某個奇葩的項目,遇到了一些奇葩的事情,就掉進關于fastjson做bean to json轉換時,那些關于首字符大小寫的坑。 這個奇葩項目...
數據傳輸使用json格式再方便不過了。fastjson 由阿里巴巴那伙人使用Java語言編寫,號稱最快的JSON庫前兩天遇到一個問題 后臺的數據轉化為json字符串后發送到前臺出現了$ref字樣的東西,后來明白了這是引用,在傳輸的數據中出現相同的對象時,fastjson默認開啟引用檢測將相同的對象寫成引用的形式.說到引用分為兩種,重復引用和循環引用 重復引用 指一個對象重復出現多次 循環引用 指你...
摘要:問題在雙向映射時,會相互包含對方的實例,相互引用,造成遞歸迭代,堆棧溢出。分析在后端向前端傳遞的時候會將數據序列化,轉為,這時會出現循環引用造成堆棧溢出解決方案解決方法就是在轉換時忽略循環字段。 問題: JPA 在雙向映射時,會相互包含對方的實例,相互引用,造成遞歸迭代,堆棧溢出(java.lang.StackOverflowError)。 分析: 在后端向前端傳遞的時候會將數據序列化...
閱讀 1459·2021-11-22 13:52
閱讀 1281·2021-09-29 09:34
閱讀 2690·2021-09-09 11:40
閱讀 3031·2019-08-30 15:54
閱讀 1255·2019-08-30 15:53
閱讀 971·2019-08-30 11:01
閱讀 1354·2019-08-29 17:22
閱讀 1943·2019-08-26 10:57