programing

IO를 변환하는 가장 효율적인 방법읽기바이트 배열에 근접

powerit 2023. 3. 14. 21:59
반응형

IO를 변환하는 가장 효율적인 방법읽기바이트 배열에 근접

나는 매우 간단한 Go 웹 서버를 가지고 있다.이 작업은 인바운드 json 페이로드 수신입니다.그런 다음 바이트 배열이 예상되는 하나 이상의 서비스에 페이로드를 게시합니다.payload는 확인할 필요가 없습니다.방금 보냈어요.

이 경우 인바운드 작업을 수신하여 Google PubSub으로 전송합니다.다른 서비스일 수도 있어요.그건 별로 중요하지 않아요.먼저 디코딩하지 않고 객체를 바이트 배열로 변환할 수 있는 가장 효율적인 방법을 찾고 있습니다.

왜일까요? 한 서버에서 JSON을 디코딩하고 변환한 후 나중에 마샬링 해제하는 것은 다소 낭비인 것 같습니다.게다가 두 개의 동일한 구조를 두 개의 패키지로 유지하고 싶지 않습니다.

IO 변환은 어떻게 가능합니까?ReadCloser는 바이트 배열에 가까우므로 마샬링을 한 번만 해제하면 됩니다.나는 다음과 같은 대답을 시도했지만 그것이 가장 효율적인 방법이라고 생각하지 않는다.

io부터.이동 시 문자열에 대한 판독기

http 서버 코드는 다음과 같습니다.

func Collect(d DbManager) http.HandlerFunc {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")

    code := 422
    obj := Report{}
    response := Response{}
    response.Message = "Invalid request"

    decoder := json.NewDecoder(r.Body)
    decoder.Decode(&obj)

    if obj.Device.MachineType != "" {
        msg,_ := json.Marshal(obj)
        if d.Publish(msg, *Topic) {
          code = 200
        }
        response.Message = "Ok"
    }

    a, _ := json.Marshal(response)
    w.WriteHeader(code)
    w.Write(a)
    return
})
}

판독기를 읽음으로써 판독기를 바이트로 변환합니다.그렇게 하는 데 더 효율적인 방법은 없습니다.

body, err := ioutil.ReadAll(r.Body)

에서 무조건 바이트를 전송하는 경우io.Reader에 대해서io.Writer, 를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/39945968/most-efficient-way-to-convert-io-readcloser-to-byte-array

반응형