gpt4 book ai didi

java - Java中过滤ASCII流

转载 作者:行者123 更新时间:2023-11-30 04:29:57 26 4
gpt4 key购买 nike

我想编写一个类用于Java和C++之间的通信

关于 Java 和 C++ 通信有很多讨论。在这里我不是要求如何沟通,我知道并且我知道如何沟通。

我创建了一个

 OutputStream os = socketChannel.socket().getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter( os);
BufferedWriter wr = new BufferedWriter( osw );

然后我写

 String data= dataArea.getText();

wr.write( dataArea.getText() );
wr.write('\0');//here is the wire with C++
wr.flush(); // flushes the stream
<小时/>

我发送一些文字:

Hi this is a test
i send also
character as dollar $ ...
or other stange é*"£$%&/(()=?'^ìì[]@!<>#òùèé+*
and so on

因此读取在我看到的两个系统之间发送的原始文本:

00000000  48 69 20 74 68 69 73 20  69 73 20 61 20 74 65 73   Hi this  is a tes 
00000010 74 0A 69 20 73 65 6E 64 20 61 6C 73 6F 20 0A 63 t.i send also .c
00000020 68 61 72 61 63 74 65 72 20 61 73 20 64 6F 6C 6C haracter as doll
00000030 61 72 20 24 20 2E 2E 2E 0A 6F 72 20 6F 74 68 65 ar $ ... .or othe
00000040 72 20 73 74 61 6E 67 65 20 C3 A9 2A 22 C2 A3 24 r stange ..*"..$
00000050 25 26 2F 28 28 29 3D 3F 27 5E C3 AC C3 AC 5B 5D %&/(()=? '^....[]
00000060 40 21 3C 3E 23 C3 B2 C3 B9 C3 A8 C3 A9 2B 2A 0A @!<>#... .....+*.
00000070 61 6E 64 20 73 6F 20 6F 6E 00 and so o n.

这已经接近解决方案了。

更改 CHARSET“US-ASCII”我获得

Hi this is a test
i send also
character as dollar $ ...
or other stange é*"£$%&/(()=?'^ìì[]@!<>#òùèé+*
and so on


00000000 48 69 20 74 68 69 73 20 69 73 20 61 20 74 65 73 Hi this is a tes
00000010 74 0A 20 20 20 20 69 20 73 65 6E 64 20 61 6C 73 t. i send als
00000020 6F 20 0A 20 20 20 20 63 68 61 72 61 63 74 65 72 o . c haracter
00000030 20 61 73 20 64 6F 6C 6C 61 72 20 24 20 2E 2E 2E as doll ar $ ...
00000040 0A 20 20 20 20 6F 72 20 6F 74 68 65 72 20 73 74 . or other st
00000050 61 6E 67 65 20 3F 2A 22 3F 24 25 26 2F 28 28 29 ange ?*" ?$%&/(()
00000060 3D 3F 27 5E 3F 3F 5B 5D 40 21 3C 3E 23 3F 3F 3F =?'^??[] @!<>#???
00000070 3F 2B 2A 0A 20 20 20 20 61 6E 64 20 73 6F 20 6F ?+*. and so o
00000080 6E 00

这已经接近我的目的了。

<小时/>

我只需要传输带有扩展字符“è”的 ASCII-->E8

然后我需要在字符串末尾添加“\0”。

'\0'是消息终止符。

现在的问题是:我喜欢使用 Java 创建一个 Writer 或流编写器来输出特定的二进制数据格式。

在什么级别上使用 OutputStreamWriterBufferedWriter 是正确的,我应该从头开始重写扩展还是使用某些库?有一些关于我喜欢做什么的例子吗?我将对输入执行相同的操作

我喜欢以这种形式编写它,因为明天当我用 Java 重写 C++ 服务器时,我会在两侧使用 DataOutputStream。

使用 while 不是一个好的解决方案,我更喜欢 Java 集成度更高的解决方案。

最佳答案

此流已启用自动刷新和 US-ASCII,如您所愿。

OutputStream os = socketChannel.socket().getOutputStream();
PrintStream ps = new PrintStream( os, true, "US-ASCII" );
ps.print( "tange é*"£$%&/(()=?'^ìì[]@!<>#òùèé+*" );
os.write( (byte)0 ); // end-of-message

关于java - Java中过滤ASCII流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14880484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com