Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字写入字节[]而不是字符串_Java_Android_Sockets_Tcp - Fatal编程技术网

Java套接字写入字节[]而不是字符串

Java套接字写入字节[]而不是字符串,java,android,sockets,tcp,Java,Android,Sockets,Tcp,我是套接字编程新手,我一直在学习一些类似的教程,并且能够使用套接字在TCP上构建客户机-服务器体系结构 问题是,这些教程是基本的,因此它们教您如何使用PrintWriter和BufferedReader发送,这两种方法似乎都是写和读字符串。我必须加密我的数据并将其作为字节[]发送,因此问题是: 对于这个意思,我仍然可以使用PrintWriter和BufferedReader?如果没有,那么 这意味着我应该使用什么类以及如何使用?我已经看到了DataOutputStream和DataInputSt

我是套接字编程新手,我一直在学习一些类似的教程,并且能够使用套接字在TCP上构建客户机-服务器体系结构

问题是,这些教程是基本的,因此它们教您如何使用
PrintWriter
BufferedReader
发送,这两种方法似乎都是写和读
字符串
。我必须加密我的数据并将其作为
字节[]
发送,因此问题是:

  • 对于这个意思,我仍然可以使用
    PrintWriter
    BufferedReader
    ?如果没有,那么
  • 这意味着我应该使用什么类以及如何使用?我已经看到了
    DataOutputStream
    DataInputStream
    以及其他几个类,但没有发现它们之间的区别,也没有发现为什么要使用它们

  • PS:加密部分已经完成,所以不要担心,因为这不是问题:)

    您应该使用
    OutputStream
    进行写入,使用
    InputStream
    进行读取。这些用于二进制数据-任何后缀为
    Writer
    Reader
    的都用于文本数据


    您可能会发现
    DataOutputStream
    DataInputStream
    很有用-它们基本上添加了一些围绕普通
    OutputStream
    的服务。但是,如果您只需要将
    字节[]
    写入流,那么简单的
    OutputStream
    就可以了。

    您应该使用
    OutputStream
    进行写入,使用
    InputStream
    进行读取。这些用于二进制数据-任何后缀为
    Writer
    Reader
    的都用于文本数据


    您可能会发现
    DataOutputStream
    DataInputStream
    很有用-它们基本上添加了一些围绕普通
    OutputStream
    的服务。但是,如果您只需要将
    字节[]
    写入流,那么简单的
    输出流就可以了。

    我的次要问题。套接字是否会自动缓冲数据,或者写调用是否会发送实际的TCP数据包?我曾经将它包装在BufferedOutputStream中,但我不确定是否需要它。@MartijnCourteaux:我相信套接字会自动缓冲(例如在操作系统或网络适配器级别),但可能是使用
    BufferedOutputStream
    会缓冲更多。好吧,既然你提到了二进制数据,也许我有一些概念上的错误。我之所以编写
    byte[]
    是因为AES加密过程返回一个
    byte[]
    ,但实际上我正在发送一个
    JSON
    字符串。我是否应该以不同的方式对其进行加密,以便编写文本(因为我实际上并没有将二进制数据作为文件或位图发送)?另外,作为一个附带问题,通过TCP发送JSON被认为是正确的,还是数据格式有一个标准?@ChristopherFrancisco:不,您发送的是二进制数据-这很好:)当我说“文本数据”时,我的意思是“使用UTF-8或ISO-8859-1等编码的字符串”。加密的结果肯定算作二进制数据。当然,如果您的加密适合于流式传输,您可以创建一个OutputStreamWriter,它位于您的EncryptingOutputStream之上,它本身将写入底层的OutputStream…我的一个次要问题。套接字是否会自动缓冲数据,或者写调用是否会发送实际的TCP数据包?我曾经将它包装在BufferedOutputStream中,但我不确定是否需要它。@MartijnCourteaux:我相信套接字会自动缓冲(例如在操作系统或网络适配器级别),但可能是使用
    BufferedOutputStream
    会缓冲更多。好吧,既然你提到了二进制数据,也许我有一些概念上的错误。我之所以编写
    byte[]
    是因为AES加密过程返回一个
    byte[]
    ,但实际上我正在发送一个
    JSON
    字符串。我是否应该以不同的方式对其进行加密,以便编写文本(因为我实际上并没有将二进制数据作为文件或位图发送)?另外,作为一个附带问题,通过TCP发送JSON被认为是正确的,还是数据格式有一个标准?@ChristopherFrancisco:不,您发送的是二进制数据-这很好:)当我说“文本数据”时,我的意思是“使用UTF-8或ISO-8859-1等编码的字符串”。加密的结果肯定算作二进制数据。当然,如果您的加密适合于流式传输,您可以创建一个OutputStreamWriter,它在您的EncryptingOutputStream之上分层,它本身将写入底层OutputStream。。。