diff --git a/contrib/codecs/rdwr/client.go b/contrib/codecs/rdwr/client.go
index 4d035b7c8a361309296ec3b18e483364c09688e3..0cf77e5fb346bf786cbe8068e20c7b0ef671d10e 100644
--- a/contrib/codecs/rdwr/client.go
+++ b/contrib/codecs/rdwr/client.go
@@ -10,6 +10,7 @@ import (
 	"gfx.cafe/open/jrpc/pkg/clientutil"
 	"gfx.cafe/open/jrpc/pkg/jjson"
 	"gfx.cafe/open/jrpc/pkg/jsonrpc"
+	"github.com/go-faster/jx"
 )
 
 type Client struct {
@@ -65,17 +66,18 @@ func (c *Client) Mount(h jsonrpc.Middleware) {
 }
 
 func (c *Client) listen() error {
-	var msg json.RawMessage
 	defer func() {
 		_ = c.Close()
 	}()
-	dec := json.NewDecoder(bufio.NewReader(c.rd))
+	jd := jx.GetDecoder()
+	defer jx.PutDecoder(jd)
+	jd.Reset(c.rd)
 	for {
-		err := dec.Decode(&msg)
+		msg, err := jd.RawAppend(nil)
 		if err != nil {
 			return err
 		}
-		msgs, _ := jsonrpc.ParseMessage(msg)
+		msgs, _ := jsonrpc.ParseMessage(json.RawMessage(msg))
 		for i := range msgs {
 			v := msgs[i]
 			if v == nil {