Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何获得实现bufio.Writer的io.WriteCloser

如何获得实现bufio.Writer的io.WriteCloser
EN

Stack Overflow用户
提问于 2017-03-30 02:49:45
回答 1查看 5.5K关注 0票数 6

我希望以非缓冲的方式扩展将数据写入文件的现有代码。

代码要求编写器实现io.WriteCloser接口。因此,仅用bufio.Writer包装现有文件是行不通的,因为它没有实现这个接口。

如何使bufio.Writer实现并将必要的密切调用传递给底层文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 03:01:32

io.WriteCloser是接口:

代码语言:javascript
运行
AI代码解释
复制
type WriteCloser interface {
        Writer
        Closer
}

它最终“规定”了这两种方法:

代码语言:javascript
运行
AI代码解释
复制
Write(p []byte) (n int, err error)

Close() error

bufio.Writer已经有了一个Write()方法,因此要使它成为WriteCloser,只需要一个Close()方法。

使用noop bufio.Writer方法扩展Close()

代码语言:javascript
运行
AI代码解释
复制
type MyWriteCloser struct {
    *bufio.Writer
}

func (mwc *MyWriteCloser) Close() error {
    // Noop
    return nil
}

*MyWriteCloser类型的值现在是WriteCloser。这是最简单的扩展。使用它:

代码语言:javascript
运行
AI代码解释
复制
bw := bufio.NewWriter(w)

mwc := &MyWriteCloser{bw}

虽然我们可以-and,但我们应该添加一个更有意义的Close()方法。当bufio.Write进行缓冲写入时,我们应该在声明它关闭之前刷新它的内部缓冲区:

代码语言:javascript
运行
AI代码解释
复制
func (mwc *MyWriteCloser) Close() error {
    return mwc.Flush()
}

还请注意,由于bufio.Write不能关闭(不提供Close()方法),这不会关闭它的底层io.Writer,这只是为了符合io.Closerio.WriteCloser接口。

如果您还想关闭基础文件,您还必须存储它,并且在调用bufio.Flush() (确保所有内容都被写入)之后,如果它没有返回任何错误,那么您也可以继续关闭该文件。

这就是它的样子:

代码语言:javascript
运行
AI代码解释
复制
type MyWriteCloser struct {
    f *os.File
    *bufio.Writer
}

func (mwc *MyWriteCloser) Close() error {
    if err := mwc.Flush(); err != nil {
        return err
    }
    return mwc.f.Close()
}

使用它:

代码语言:javascript
运行
AI代码解释
复制
// Open a file:
f, err := os.Open("myfile.txt")
if err != nil {
    panic(err) // Handle error
}

mwc := &MyWriteCloser{f, bufio.NewWriter(f)}
defer mwc.Close()

// use mwc
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43115699

复制
相关文章
在Cookie中存储对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/46955119
DannyHoo
2018/09/13
3.8K0
ArrayList在Java多线程中的应用
开发中,存在这样的业务逻辑,类似倒金字塔结构,下层数据需要基于上层的数据进行逻辑计算。设计思路是:定义一个全局变量upLayerList,来保存上一层的数据。每一层计算仅需要知道upLayerList就可以,不用关心上一层数据怎么获取。当前层计算完毕后,把结果赋值给upLayerList,留给下一层使用。
用户2146693
2019/08/08
1.5K0
ArrayList在Java多线程中的应用
Java中的ArrayList
在Java编程中,ArrayList是一种常用的动态数组,可以在运行时自动调整大小。本文将深入探讨ArrayList的底层实现,并通过性能分析来评估其优劣。
疯狂的KK
2023/08/08
2110
Java中的ArrayList
Java中ArrayList的用法
ArrayList类是一个特殊的数组--动态数组。来自于System.Collections命名空间;通过添加和删除元素,就可以动态改变数组的长度。
SingYi
2022/07/14
1.2K0
在Java中如何加快大型集合的处理速度
作者 | Nahla Davies 译者 | 明知山 策划 | 丁晓昀 本文讨论了 Java Collections Framework 背后的目的、Java 集合的工作原理,以及开发人员和程序员如何最大限度地利用 Java 集合。 1 什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一。超过 100 万个网站通过某种形式在使用 Java,超过三分之一的软件开发人员的工具箱中有 Java。 Java 在它的整个生命历程中经历了重大的演变。一个早期的
深度学习与Python
2023/03/29
1.9K0
在Java中如何加快大型集合的处理速度
如何在ArrayList中存储不同类型的对象并按照类型输出数据
高久峰
2023/06/27
3750
Java中ArrayList的同步方法
arrayList 的实现是默认不同步的。这意味着如果一个线程在结构上修改它并且多个线程同时访问它,它必须在外部同步。结构修改意味着从列表中添加或删除元素或显式调整后备数组的大小。改变现有元素的值不是结构修改。
小锋学长生活大爆炸
2021/09/26
1.9K0
java中arraylist扩容问题_Arraylist扩容机制[通俗易懂]
当我们要 add 进第1个元素到 ArrayList 时,elementData.length 为0 (因为还是一个空的 list),因为执行了 ensureCapacityInternal() 方法 ,所以 minCapacity 此时为10。此时,minCapacity – elementData.length > 0成立,所以会进入 grow(minCapacity) 方法。
全栈程序员站长
2022/09/06
9790
Iterator在ArrayList中的源码实现
获取迭代器 List<LinkedHashMap> list = new ArrayList<>(); Iterator iterator = list.iterator(); iterator()方法实现 public Iterator<E> iterator() { return new Itr(); } Itr 源码 /** * An optimized version of AbstractList.Itr */ private class Itr imp
小小明童鞋
2018/06/13
1.1K0
SharedPreferences存储ArrayList
最近在做“桌面”项目(奶糖桌面),在做到“隐藏APP”的时候,是把要隐藏的APP(arraylist)包名拿出来,在获取全部APP(allapplist)的时候,把获取到的包名和所有APP包名做一个比较,如果存在的话就从allapplist中移除这一项。详情可参考以下代码:
奶油话梅糖
2021/03/16
9470
Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别:       1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。        2. 对于随机访问,ArrayList优于LinkedList       3. 对于插入和删除操作,LinkedList优于ArrayList   4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前
nnngu
2018/03/15
1.6K0
Java中Arraylist与linkedlist的区别
List: 有顺序的,元素可以重复 遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 遍历: ArrayList<String> al=new ArrayList(); al.add("winsun"); al.add("weixin"); al.add("mybole"); for(int i=0;i<al.size();i
闵开慧
2018/03/30
9720
Java 中的 Vector、Stack 与 ArrayList
引子:首先不得不说, Vector 与 Stack 这一对继承设计是蹩脚、失败的。
Fisherman渔夫
2020/02/17
1.1K0
Java中ArrayList集合的基本使用
概述: 要知道数组的长度是不可改变的 但是ArrayList集合的长度是可以随意变化的 1.创建 类型不能是基本数据类型 只能是引用数据类型 用基本数据类型的包装类就可以 //创建ArrayList集合 ArrayList<String> arrayList = new ArrayList<String>(); //int包装类 ArrayList<Integer> arrayList2 = new ArrayList<Integer>(); 对照表:
用户9006224
2022/12/21
6740
Java中ArrayList集合的基本使用
JAVA对象在JVM中内存分配
如果你还不了解JVM内存模型的建议您先看下JVM内存模型 以一下代码为例,来分析下,java的实例对象在内存中的空间分配(JDK1.8)。 public class Student { private String name; private static Birthday birthday = new Birthday(); public Student(String name) { this.name = name; } public sta
java404
2018/05/18
1.9K0
面试官:Java中实例对象存储在哪?
低级语言是计算机认识的语言、高级语言是程序员认识的语言。如何从高级语言转换成低级语言呢?这个过程其实就是编译。
Java宝典
2021/03/16
5970
Java 移动 ArrayList 中的元素的方法
原文地址:https://www.baeldung.com/java-arraylist-move-items
明明如月学长
2023/03/13
1.5K0
ArrayList实现原理分析(Java源码剖析)ArrayList使用的存储的数据结构ArrayList的初始化ArrayList是如何动态增长ArrayList如何实现元素的移除ArrayList
ArrayList是我们经常使用的一个数据结构,我们通常把其用作一个可变长度的动态数组使用,大部分时候,可以替代数组的作用,我们不用事先设定ArrayList的长度,只需要往里不断添加元素即可,ArrayList会动态增加容量。ArrayList是作为List接口的一个实现。 那么ArrayList背后使用的数据结构是什么呢? ArrayList是如何保证动态增加容量,使得能够正确添加元素的呢?
desperate633
2018/08/27
1.6K0
java之学习去除ArrayList中重复自定义对象元素
结果示意图: 前言: 很多时候或者很多项目中都会遇到集合中重复的部分,如何去除这些重复的部分呢?接下来小编就用创建新集合的方式去除集合中重复的部分。 原理: 原理就是创建新的集合 把旧的集合复制到新的
吾爱乐享
2018/07/12
1.7K0
在Java中将ArrayList转换为Array
In this tutorial you will learn how to convert ArrayList to Array in Java.
用户7886150
2021/04/29
1.8K0

相似问题

在ArrayList中存储对象时出错

20

如何检索存储在Java ArrayList中的对象值

60

在arraylist中存储对象

52

Java:如何存储和传输大型Integer-ArrayList

120

在java中存储要文件的大型JSON对象?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文