激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - golang實現java uuid的序列化方法

golang實現java uuid的序列化方法

2020-09-21 00:11EasyNetCN Golang

這篇文章主要介紹了golang實現java uuid的序列化方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

目前只實現了java生成的固定的uuid:85bb94b8-fd4b-4e1c-8f49-3cedd49d8f28的序列化

?
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
package main
 
import (
  "encoding/binary"
  "encoding/json"
  "fmt"
  "log"
  "os"
  "strings"
  "time"
 
  "github.com/Shopify/sarama"
  "github.com/google/uuid"
)
 
const (
  DATE_TIME_PATTERN = ""
  STREAM_MAGIC   = 0xaced
  STREAM_VERSION  = 5
  TC_STRING     = 0x74
  TC_OBJECT     = 0x73
  TC_CLASSDESC   = 0x72
  SC_SERIALIZABLE  = 0x02
  TC_ENDBLOCKDATA  = 0x78
  TC_NULL      = 0x70
)
 
func main() {
  uuidTest()
}
 
func uuidTest() {
  f, _ := os.Create("uuid-go.out")
  defer f.Close()
 
  f.Write(ShortBytes(STREAM_MAGIC))
  f.Write(ShortBytes(STREAM_VERSION))
  f.Write([]byte{TC_OBJECT})
  f.Write([]byte{TC_CLASSDESC})
 
  className := "java.util.UUID"
  classNameLen := len(className)
 
  f.Write(ShortBytes(uint16(classNameLen)))
  f.Write([]byte(className))
 
  sid := -4856846361193249489
 
  f.Write(LongBytes(uint64(sid)))
 
  //flags
  f.Write([]byte{2})
 
  //fields length
  f.Write(ShortBytes(2))
 
  //field type code
  f.Write([]byte{'J'})
 
  f1 := "leastSigBits"
  f1Len := len(f1)
 
  f.Write(ShortBytes(uint16(f1Len)))
  f.Write([]byte(f1))
 
  //filed type code
  f.Write([]byte{'J'})
 
  f2 := "mostSigBits"
  f2Len := len(f2)
 
  f.Write(ShortBytes(uint16(f2Len)))
  f.Write([]byte(f2))
 
  f.Write([]byte{TC_ENDBLOCKDATA})
  f.Write([]byte{TC_NULL})
 
  leastSigBits := -8121893460813967576
 
  f.Write(LongBytes(uint64(leastSigBits)))
 
  mostSigBits := -8810284723775779300
 
  f.Write(LongBytes(uint64(mostSigBits)))
 
}
 
func ShortBytes(i uint16) []byte {
  bytes := make([]byte, 2)
 
  binary.BigEndian.PutUint16(bytes, i)
 
  return bytes
}
 
func LongBytes(i uint64) []byte {
  bytes := make([]byte, 8)
 
  binary.BigEndian.PutUint64(bytes, i)
 
  return bytes
}
 
func BigEndian() { // 大端序
  // 二進制形式:0000 0000 0000 0000 0001 0002 0003 0004
  var testInt int32 = 0x01020304 // 十六進制表示
  fmt.Printf("%d use big endian: \n", testInt)
 
  var testBytes []byte = make([]byte, 4)
  binary.BigEndian.PutUint32(testBytes, uint32(testInt)) //大端序模式
  fmt.Println("int32 to bytes:", testBytes)
 
  convInt := binary.BigEndian.Uint32(testBytes) //大端序模式的字節轉為int32
  fmt.Printf("bytes to int32: %d\n\n", convInt)
}
 
func LittleEndian() { // 小端序
  //二進制形式: 0000 0000 0000 0000 0001 0002 0003 0004
  var testInt int32 = 0x01020304 // 16進制
  fmt.Printf("%d use little endian: \n", testInt)
 
  var testBytes []byte = make([]byte, 4)
  binary.LittleEndian.PutUint32(testBytes, uint32(testInt)) //小端序模式
  fmt.Println("int32 to bytes:", testBytes)
 
  convInt := binary.LittleEndian.Uint32(testBytes) //小端序模式的字節轉換
  fmt.Printf("bytes to int32: %d\n\n", convInt)
}
 
func Int64ToBytes(i int64) []byte {
  var buf = make([]byte, 8)
  binary.BigEndian.PutUint64(buf, uint64(i))
  return buf
}

java讀取測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test {
 
  public static void main(String[] args) throws IOException, ClassNotFoundException {
    readUUIDTest();
  }
 
  private static void readUUIDTest() throws IOException, ClassNotFoundException {
    try (var fis = new FileInputStream("uuid-go.out"); var is = new ObjectInputStream(fis)) {
      var uuid = is.readObject();
 
      System.out.print(uuid);
 
    }
  }
}

到此這篇關于golang實現java uuid的序列化方法的文章就介紹到這了,更多相關golang實現java uuid序列化內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.jianshu.com/p/ebf9fe8d234d

延伸 · 閱讀

精彩推薦
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
主站蜘蛛池模板: 少妇的肉体2无删减版 | 玖玖精品视频在线 | 欧美成人午夜影院 | 女女久久 | 黄色免费在线网站 | 红杏亚洲影院一区二区三区 | 亚洲人成网在线观看 | 在线观看一区二区三区四区 | 毛片在线视频观看 | 国产一级淫片在线观看 | 亚洲第一成人在线视频 | 九九热在线视频观看 | h视频免费看 | 成人一级视频在线观看 | 黄色一级片免费观看 | 久久久久亚洲美女啪啪 | 中文字幕精品一二三四五六七八 | 久久91精品久久久久清纯 | 日日狠狠久久偷偷四色综合免费 | 黄色片网站免费观看 | 日日狠狠久久偷偷四色综合免费 | 高清中文字幕在线 | 成人国产精品一区 | 国产在线观看 | 欧美一级三级在线观看 | h视频免费在线 | xnxx 美女19 | 亚洲日本欧美 | 特级无码毛片免费视频尤物 | 欧美黄色一级生活片 | 色av综合在线 | 神秘电影91| 毛片在线免费播放 | 久久久久国产成人精品亚洲午夜 | 久久成人国产精品 | 国产亚洲精品综合一区91555 | 成人在线免费观看网址 | 特级黄aaaaaaaaa毛片 | 高清一区二区在线观看 | 成年毛片| 久草在线视频新 |