@@ -898,19 +898,16 @@ func (b *BitSet) WriteTo(stream io.Writer) (int64, error) {
898
898
// current implementation of bufio.Writer is more memory efficient than
899
899
// binary.Write for large set
900
900
writer := bufio .NewWriter (stream )
901
- var item = make ([]byte , 8 ) // for serializing uint64
902
- var n = binary .Size (uint64 (0 )) // number of bytes written
903
- for _ , x := range b .set {
904
- binaryOrder .PutUint64 (item , x )
905
- nn , err := writer .Write (item )
906
- if err != nil {
907
- return int64 (n + nn ), err
901
+ var item = make ([]byte , binary .Size (uint64 (0 ))) // for serializing one uint64
902
+ for i := range b .set {
903
+ binaryOrder .PutUint64 (item , b .set [i ])
904
+ if nn , err := writer .Write (item ); err != nil {
905
+ return int64 (i * binary .Size (uint64 (0 )) + nn ), err
908
906
}
909
- n += nn
910
907
}
911
908
912
909
err = writer .Flush ()
913
- return int64 (n ), err
910
+ return int64 (b . BinaryStorageSize () ), err
914
911
}
915
912
916
913
// ReadFrom reads a BitSet from a stream written using WriteTo
@@ -932,17 +929,15 @@ func (b *BitSet) ReadFrom(stream io.Reader) (int64, error) {
932
929
// current implementation bufio.Reader is more memory efficient than
933
930
// binary.Read for large set
934
931
reader := bufio .NewReader (stream )
935
- i := 0
936
- var item = make ([]byte , 8 ) // one uint64
937
- for {
932
+ var item = make ([]byte , binary .Size (uint64 (0 ))) // one uint64
933
+ for i := uint64 (0 ); i < length ; i ++ {
938
934
if _ , err := reader .Read (item ); err != nil {
939
935
if err == io .EOF {
940
936
break // done
941
937
}
942
938
return 0 , err
943
939
}
944
940
newset .set [i ] = binaryOrder .Uint64 (item )
945
- i ++
946
941
}
947
942
948
943
* b = * newset
0 commit comments