我是Socket编程的新手,我正在尝试编写一个简单的聊天应用程序。我的服务器利用字符串的HashSet来存储用户名信息,我想将HashSet
从服务器传递给客户端。我之前使用ObjectOutputStream
和ObjectInputStream
通过常规套接字执行此操作。但是,现在我正在使用SocketChannel
并且它不允许这样我得到以下异常:
java.nio.channels.IllegalBlockingModeException
所以我在网上搜索了如何做到这一点,每个人都说了不同的东西,而且大多数都是我的头脑。有没有一种简单的方法可以在不完全覆盖writeObject
和readObject
方法的情况下完成此操作?
提前谢谢你。
答案 0 :(得分:1)
我建议您使用非阻止模式或不使用序列化。
如果必须,您需要序列化为<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<label for="text-area">Paste your code here: </label>
<form method="post" >
<textarea name="code_input" id="code_textarea" class="form-control" rows="5" placeholder="Start coding!" required></textarea>
<div class="button-container">
<select required name="language-select" class="form-control" id="language_selector">
<option value="" selected disabled>Language</option>
<option>20 options follow</option>
<!-- THIS WILL KEEP THE VALUE IN THE DROPDOWN AFTER SUBMIT -->
<script type="text/javascript">
document.getElementById('language_selector').value = "";
</script>
</select>
<br/>
<br/>
<div id="button-container" class="btn-toolbar">
<button id="drive_submit_btn" class="btn btn-md" type="submit">Preview</button>
<button style="display:none" id="upload_btn" class="btn btn-md" type="submit">Upload</button>
</div>
</div>
</form>
<div class="show-code">
<script src="lib/prism.js"></script>
<!-- THIS DISPLAYS THE CODE AFTER SUBMITTING USING THE PRISM.JS PLUGIN FOR SYNTAX HIGHLIGHTING -->
<!-- Get language selection from dropdown and append it to language class. Echo the text as highlighted code -->
<pre><code class="language-"></code></pre>
</div>
</div>
<!-- THIS IS THE JAVASCRIPT TO HIDE THE BUTTON UNTIL TEXT IS ENTERED.-->
<!-- HOWEVER IT ALWAYS HIDES IT!! -->
,获取长度,发送长度,发送字节,接收长度,继续读取,累积数据,直到您拥有正确的数据长度,放入它变为ByteArrayOutputStream
,并从中反序列化。不容易,尤其是手挥手,不停地阅读&#39;。它浪费时间和空间。