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