可以从流中读取带符号的字节吗?

时间:2014-06-15 19:53:46

标签: java c# servlets stream

我正在尝试将java servlet发送的字节读入C#应用程序,到目前为止,我还没有能够使用C#中的普通流从servlet获得更多的乱码。我已经尝试了各种形式的解码,但还没有找到一种工作方式来从http源读取s#到c#应用程序。

servlet字节随

一起发送

已编辑的代码

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    ServletOutputStream resp = response.getOutputStream();
    try{
        resp.write("test".getBytes("UTF-8"));
    }
    catch(Exception e){
        //Do Nothing
    }

C#用

读入
        try
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://path.to/servlet");
            req.Method = "POST";
            req.ContentType = "text/html";
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

            string text;
            using (var reader = new StreamReader(resp.GetResponseStream()))
            {
                text = reader.ReadToEnd();
                Console.WriteLine(text);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }

我最终得到两个问号或两个ascii符号。

有没有人知道如何将这些Java字节流式传输到C#应用程序中?

1 个答案:

答案 0 :(得分:2)

两个问题:

  • 您在C#和Java中都使用了platform-default编码。这几乎总是一个糟糕的选择。在Java中明确指定编码 - UTF-8通常是一个不错的选择。 (这也是大多数.NET代码的默认设置。)
  • 您忽略了Stream.Read的返回值;通常,您应该使用它来计算出您实际收到的数据量。但是,在这种情况下,使用StreamReader会更好

    string text;
    // Uses UTF-8 implicitly
    using (var reader = new StreamReader(httpResponse.GetResponseStream())
    {
        text = reader.ReadToEnd();
    }
    

Java中字节的签名与此无关。

(另外,您为什么使用new String("test")?您认为只使用"test"会怎样?)