package sqlSync import ( "encoding/binary" "errors" "os" "goutil/fileUtil" "goutil/intAndBytesUtil" ) const ( // 头部字节长度 con_Header_Length = 4 ) var ( // 字节的大小端顺序 byteOrder = binary.LittleEndian ) // 按照指定方式读取文本内容 // fileObj:大文件对象 // data:待写入的数据 // 返回值: // error:写入是否存在异常 func Write(fileObj *fileUtil.BigFile, data string) error { // 获得数据内容的长度 dataLength := len(data) // 将长度转化为字节数组 header := intAndBytesUtil.Int32ToBytes(int32(dataLength), byteOrder) // 将头部与内容组合在一起 message := append(header, data...) // 写入数据 return fileObj.WriteMessage(message) } // 从文件读取一条数据 // fileObj:文件对象 // 返回值: // result:读取到的字符串 // err:错误信息 func Read(fileObj *os.File) (result string, readLen int64, err error) { // 1. 读取头部内容 header := make([]byte, 4) var n int n, err = fileObj.Read(header) if err != nil { return } if n < con_Header_Length { err = errors.New("can not read 4 byte for read len") readLen = int64(n) return } dataLength := intAndBytesUtil.BytesToInt32(header, byteOrder) // 2. 读取指定长度的内容 data := make([]byte, dataLength) n, err = fileObj.Read(data) if err != nil { return } readLen = int64(len(header) + int(dataLength)) result = string(data) return }