• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang实现java uuid的序列化方法

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

    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读取测试

    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序列化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • golang如何自定义json序列化应用详解
    • golang中json反序列化可能遇到的问题
    上一篇:使用GO实现Paxos共识算法的方法
    下一篇:Go语言实现IP段范围校验示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang实现java uuid的序列化方法 golang,实现,java,uuid,的,序列化,