-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathwriter.go
executable file
·120 lines (103 loc) · 2.38 KB
/
writer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package geobuf
import (
"bufio"
"os"
"github.com/flywave/go-geobuf/io"
"github.com/flywave/go-geom"
"github.com/flywave/go-pbf"
"bytes"
"fmt"
"io/ioutil"
)
type Writer struct {
Filename string
Writer *bufio.Writer
FileBool bool
Buffer *bytes.Buffer
File *os.File
Bytesvals []byte
}
var writersize = 64 * 4096
func WriterFileNew(filename string) *Writer {
file, err := os.Create(filename)
if err != nil {
fmt.Println(err)
}
return &Writer{Filename: filename, FileBool: true, File: file, Bytesvals: []byte{}}
}
func WriterFile(filename string) *Writer {
file, err := os.OpenFile(filename, os.O_APPEND|os.O_RDWR, os.ModeAppend)
if err != nil {
fmt.Println(err)
}
return &Writer{Filename: filename, FileBool: true, File: file}
}
func WriterBufNew() *Writer {
b := bytes.NewBuffer([]byte{})
return &Writer{Writer: bufio.NewWriterSize(b, writersize), Buffer: b, FileBool: false}
}
func WriterBuf(bytevals []byte) *Writer {
buffer := bytes.NewBuffer(bytevals)
return &Writer{Writer: bufio.NewWriterSize(buffer, writersize), Buffer: buffer, FileBool: false}
}
func (writer *Writer) WriteFeature(feature *geom.Feature) {
bytevals := io.WriteFeature(feature)
bytevals = append(
append(
[]byte{10}, pbf.EncodeVarint(uint64(len(bytevals)))...,
),
bytevals...)
if writer.FileBool {
writer.File.Write(bytevals)
} else {
writer.Writer.Write(bytevals)
}
}
func (writer *Writer) WriteRaw(bytevals []byte) {
bytevals = append(
append(
[]byte{10}, pbf.EncodeVarint(uint64(len(bytevals)))...,
),
bytevals...)
if writer.FileBool {
writer.File.Write(bytevals)
} else {
writer.Writer.Write(bytevals)
}
}
func (writer *Writer) AddGeobuf(buf *Writer) {
if !writer.FileBool {
writer.Writer.Flush()
}
if !buf.FileBool {
buf.Writer.Flush()
if writer.FileBool {
writer.File.Write(buf.Buffer.Bytes())
} else {
writer.Writer.Write(buf.Buffer.Bytes())
}
}
}
func (writer *Writer) Bytes() []byte {
writer.Writer.Flush()
if !writer.FileBool {
return writer.Buffer.Bytes()
} else {
writer.File.Close()
bytevals, _ := ioutil.ReadFile(writer.Filename)
return bytevals
}
}
func (writer *Writer) Reader() *Reader {
if !writer.FileBool {
newreader := ReaderBuf(writer.Bytes())
return newreader
} else {
writer.File.Close()
newreader := ReaderFile(writer.Filename)
return newreader
}
}
func (writer *Writer) Close() {
writer.File.Close()
}