Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iox: MultipleBytes #271

Open
flycash opened this issue Jan 21, 2025 · 1 comment · May be fixed by #272
Open

iox: MultipleBytes #271

flycash opened this issue Jan 21, 2025 · 1 comment · May be fixed by #272

Comments

@flycash
Copy link
Contributor

flycash commented Jan 21, 2025

仅限中文

使用场景

在实践中,如果操作巨大的 []byte,那么经常出现的一种场景就是会把巨大的切片切分成多个 []byte,而后分别读写。

而在拆分之后,还会遇到一些读数据的场景,又需要把这个数据合并起来组成一个大的 []byte。这样多次操作就很消耗性能。

行业分析

如果你知道有框架提供了类似功能,可以在这里描述,并且给出文档或者例子

可行方案

如果你有设计思路或者解决方案,请在这里提供。你可以提供多个方案,并且给出自己的选择

我们引入一种全新的设计:

type MultipleBytes struct {
     data [][]byte
     idx1 int // 第几个切片
     idx2 int // data[idx1] 中的下标
}

func (b *MultipleBytes) Write(data []byte)  (int, error) {
    b.data = append(b.data, data)
}

func (b *MultipleBytes) Read(b []byte) int {
   // 从 b.data[idx1][idx2] 的位置开始往后读,读够或者读完拉到
}

其它

任何你觉得有利于解决问题的补充说明

这边在设计测试用例的时候,要小心处理各种边界条件。

你使用的是 ekit 哪个版本?

你设置的的 Go 环境?

上传 go env 的结果

@flycash
Copy link
Contributor Author

flycash commented Jan 21, 2025

也就是实现 io.Reader 和实现 io.Writer 两个接口

@flycash flycash linked a pull request Jan 21, 2025 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant