当前位置: 首页>>代码示例>>Golang>>正文


Golang Hash64.Sum方法代码示例

本文整理汇总了Golang中hash.Hash64.Sum方法的典型用法代码示例。如果您正苦于以下问题:Golang Hash64.Sum方法的具体用法?Golang Hash64.Sum怎么用?Golang Hash64.Sum使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在hash.Hash64的用法示例。


在下文中一共展示了Hash64.Sum方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: TestRef

func TestRef(t *testing.T) {
	for _, elem := range data {

		var h32 hash.Hash32 = New32()
		h32.Write([]byte(elem.s))
		if v := h32.Sum32(); v != elem.h32 {
			t.Errorf("'%s': 0x%x (want 0x%x)", elem.s, v, elem.h32)
		}

		var h32_byte hash.Hash32 = New32()
		h32_byte.Write([]byte(elem.s))
		target := fmt.Sprintf("%08x", elem.h32)
		if p := fmt.Sprintf("%x", h32_byte.Sum(nil)); p != target {
			t.Errorf("'%s': %s (want %s)", elem.s, p, target)
		}

		if v := Sum32([]byte(elem.s)); v != elem.h32 {
			t.Errorf("'%s': 0x%x (want 0x%x)", elem.s, v, elem.h32)
		}

		var h64 hash.Hash64 = New64()
		h64.Write([]byte(elem.s))
		if v := h64.Sum64(); v != elem.h64_1 {
			t.Errorf("'%s': 0x%x (want 0x%x)", elem.s, v, elem.h64_1)
		}

		var h64_byte hash.Hash64 = New64()
		h64_byte.Write([]byte(elem.s))
		target = fmt.Sprintf("%016x", elem.h64_1)
		if p := fmt.Sprintf("%x", h64_byte.Sum(nil)); p != target {
			t.Errorf("Sum64: '%s': %s (want %s)", elem.s, p, target)
		}

		if v := Sum64([]byte(elem.s)); v != elem.h64_1 {
			t.Errorf("Sum64: '%s': 0x%x (want 0x%x)", elem.s, v, elem.h64_1)
		}

		var h128 Hash128 = New128()
		h128.Write([]byte(elem.s))
		if v1, v2 := h128.Sum128(); v1 != elem.h64_1 || v2 != elem.h64_2 {
			t.Errorf("New128: '%s': 0x%x-0x%x (want 0x%x-0x%x)", elem.s, v1, v2, elem.h64_1, elem.h64_2)
		}

		var h128_byte Hash128 = New128()
		h128_byte.Write([]byte(elem.s))
		target = fmt.Sprintf("%016x%016x", elem.h64_1, elem.h64_2)
		if p := fmt.Sprintf("%x", h128_byte.Sum(nil)); p != target {
			t.Errorf("New128: '%s': %s (want %s)", elem.s, p, target)
		}

		if v1, v2 := Sum128([]byte(elem.s)); v1 != elem.h64_1 || v2 != elem.h64_2 {
			t.Errorf("Sum128: '%s': 0x%x-0x%x (want 0x%x-0x%x)", elem.s, v1, v2, elem.h64_1, elem.h64_2)
		}
	}
}
开发者ID:twmb,项目名称:murmur3,代码行数:55,代码来源:murmur_test.go

示例2: Get

func (ds *Directory) Get(key string, opts store.GetOptions) ([]byte, store.Stat, error) {
	ds.mu.RLock()
	defer ds.mu.RUnlock()

	select {
	case <-opts.Cancel:
		return nil, store.Stat{}, store.ErrCancelled
	default:
	}

	fh, path, err := ds.findAndOpen(key)
	if err != nil {
		return nil, store.Stat{}, err
	}
	if fh == nil {
		return nil, store.Stat{}, store.ErrNotFound
	}
	defer fh.Close()

	var expectedFNV [8]byte
	_, err = io.ReadFull(fh, expectedFNV[:])
	if err != nil {
		return nil, store.Stat{}, err
	}

	var rdr io.Reader
	var fnver hash.Hash64
	if opts.NoVerify {
		rdr = fh
	} else {
		fnver = fnv.New64a()
		rdr = io.TeeReader(fh, fnver)
	}

	var expectedSHA256 [32]byte
	_, err = io.ReadFull(rdr, expectedSHA256[:])
	if err != nil {
		return nil, store.Stat{}, err
	}

	fi, err := fh.Stat()
	if err != nil {
		return nil, store.Stat{}, err
	}

	size := fi.Size() - 40

	if int64(int(size)) != size {
		return nil, store.Stat{}, errors.New("file is too big")
	}

	writeTime := fi.ModTime().Unix()

	data := make([]byte, int(size))
	at := 0
	for at < len(data) {
		readInto := data[at:]
		if len(readInto) > 1024*1024 {
			readInto = readInto[:1024*1024]
		}

		n, err := rdr.Read(readInto)
		at += n
		if err != nil {
			if err == io.EOF {
				break
			}
			return nil, store.Stat{}, err
		}

		select {
		case <-opts.Cancel:
			return nil, store.Stat{}, store.ErrCancelled
		default:
		}
	}

	if at != len(data) {
		return nil, store.Stat{}, errors.New("file was shortened during read")
	}

	if !opts.NoVerify {
		actualFNV := fnver.Sum(nil)

		if !bytes.Equal(actualFNV, expectedFNV[:]) {
			fh.Close()

			// TODO: this relocking is fucked and racy
			ds.mu.RUnlock()
			ds.mu.Lock()
			ds.quarantine(key, path)
			ds.mu.Unlock()
			ds.mu.RLock()
			return nil, store.Stat{}, ErrCorruptObject
		}
	}

	return data, store.Stat{
		SHA256:    expectedSHA256,
		Size:      size,
//.........这里部分代码省略.........
开发者ID:encryptio,项目名称:slime,代码行数:101,代码来源:directory.go

示例3: hashKernel

// hashKernel returns the upper and lower base hash values from which the k
// hashes are derived.
func hashKernel(data []byte, hash hash.Hash64) (uint32, uint32) {
	hash.Write(data)
	sum := hash.Sum(nil)
	hash.Reset()
	return binary.BigEndian.Uint32(sum[4:8]), binary.BigEndian.Uint32(sum[0:4])
}
开发者ID:CaptainIlu,项目名称:cloud-torrent,代码行数:8,代码来源:boom.go


注:本文中的hash.Hash64.Sum方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。