当前位置: 首页 > 面试题库 >

在go中实现io.WriterAt的缓冲区

毛正浩
2023-03-14
问题内容

我正在使用aws-
sdk从s3存储桶下载文件。S3下载功能想要实现io.WriterAt的东西,但是bytes.Buffer不能实现。现在,我正在创建一个实现io.WriterAt的文件,但我想在内存中添加一些内容。


问题答案:

对于涉及AWS开发工具包的情况,可aws.WriteAtBuffer用于将S3对象下载到内存中。

requestInput := s3.GetObjectInput{
    Bucket: aws.String(bucket),
    Key:    aws.String(key),
}

buf := aws.NewWriteAtBuffer([]byte{})
downloader.Download(buf, &requestInput)

fmt.Printf("Downloaded %v bytes", len(buf.Bytes()))


 类似资料:
  • 默认情况下,通道是不带缓冲区的。 发送端发送数据,同时必须又接收端相应的接收数据。 而带缓冲区的通道则允许发送端的数据发送和接收端的数据获取处于异步状态,就是说发送端发送的数据可以放在缓冲区里面,可以等待接收端去获取数据,而不是立刻需要接收端去获取数据。 不过由于缓冲区的大小是有限的,所以还是必须有接收端来接收数据的,否则缓冲区一满,数据发送端就无法再发送数据了。 package main imp

  • 问题内容: 在我自己滚动之前,是否有io.Pipe的缓冲版本(在标准库中还是在第三方库中)? 上下文:我正在尝试使用该解决方案来解析使用bzip2压缩的JSON数据,以便解压缩和解析是并行进行的,但是发现加速非常小。解析未压缩的数据每百万条记录大约需要22秒。解压缩大量数据大约需要相同的时间。如预期的那样,在单线程上完成它们大约需要44秒。使用上述解决方案大约需要41秒。 io.Pipe的文档说:

  • 使用RxJava,我需要将一个项目流缓冲到3个组中,但如果传入项目之间的间隔超过500ms,则刷新缓冲区。 bufferWithTimeOrCount()操作符正是我想要的,但它似乎只针对RxJS和Rx实现。NET,我需要使用RxJava来实现这一点。 是否有方法复制bufferWithTimeOrCount()的行为,并获得我对现有RxJava 1的期望。x运算符? 尝试每隔500毫秒发出一个新

  • 我有一个简单的客户端和服务器设置。客户端希望在服务器中使用ZeroMQ执行通信方法。我将使用REQ和REP套接字,因为它们适合这个用例。然而,我对protobuf的定义有疑问。我认为这两个选项可用于实现目标: 其中“control”包含要远程执行的方法的名称。另一种选择可以是: 最好的方法是什么?或者至少使用一种方法而不是另一种方法的权衡是什么?

  • 主要内容:创建带缓冲通道,阻塞条件Go语言中有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动作的条件也会不同。只有在通道中没有要接收的值时,接收动作才会阻塞。只有在通道没有可用缓冲区容纳被发送的值时,发送动作才会阻塞。 这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲的通道保证进

  • Go语言中无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道。这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能完成发送和接收操作。 如果两个 goroutine 没有同时准备好,通道会导致先执行发送或接收操作的 goroutine 阻塞等待。这种对通道进行发送和接收的交互行为本身就是同步的。其中任意一个操作都无法离开另一