nio传输对象序列化后的字节码的问题

问题描述

大作业的题目是网络聊天室。我序列化一个HashMap来传递数据。我看这部分的代码一般都是 SocketChannel sc = (SocketChannel) key.channel(); int number = sc.read(buffer);上面的buffer一般是固定大小的比如 8096等等。可是如果对象较大 超过了 buffer大小怎么办呢?? 问题补充:<div class="quote_title">alvin198761 写道</div><div class="quote_div"><pre name="code" class="java">/** * java NIO operate * * @author 唐植超 * */public class FileUtil {。 。 。}</pre>我没写注释,但是你肯定看的懂,</div><br /><br />我指的是在客户端接收服务器端传来的数据。<br />你这个解决不了我的问题吧?<br />

解决方案

data = ByteBuffer.allocate((int) fc.size()); fc.read(data); fc.close();
解决方案二:
建议你用对象反序列化,将二进制转成对象
解决方案三:
package io.util.alvin.file;import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;/** * java NIO operate * * @author 唐植超 * */public class FileUtil {private FileUtil() {}public static String readToStr(String path) throws IOException {return new String(readToByte(path));}public static byte[] readToByte(String path) throws IOException {return readToByte(new File(path));}public static byte[] readToByte(File f) throws IOException {RandomAccessFile raf = null;FileChannel fc = null;ByteBuffer data = null;raf = new RandomAccessFile(f, "r");fc = raf.getChannel();data = ByteBuffer.allocate((int) fc.size());fc.read(data);fc.close();return null;}public static void writeFile(String path, byte[] data) throws IOException {writeFile(new File(path), data);}public static void writeFile(File f, byte[] data) throws IOException {RandomAccessFile raf = null;ByteBuffer dts = null;FileChannel fc = null;raf = new RandomAccessFile(f, "w");fc = raf.getChannel();dts = ByteBuffer.wrap(data);fc.write(dts);fc.close();}public static void copyFile(File srcFile, File targetFile)throws IOException {RandomAccessFile sourceFile = null;RandomAccessFile pasteFile = null;FileChannel srcChannel = null;FileChannel targetChannel = null;sourceFile = new RandomAccessFile(srcFile, "r");pasteFile = new RandomAccessFile(targetFile, "rw");srcChannel = sourceFile.getChannel();targetChannel = pasteFile.getChannel();targetChannel.transferFrom(srcChannel, 0, srcChannel.size());srcChannel.close();targetChannel.close();}public static void copyFile(String srcPath, String targetPath)throws IOException {copyFile(new File(srcPath), new File(targetPath));}public static void deleteFile(File f) {deleteFile(f.getAbsolutePath());}public static void deleteFile(String path) {File f = new File(path);if (!f.exists()) {return;}if (f.isFile()) {f.delete();return;}String[] children;children = f.list();if (children == null) {return;}if (children.length == 0) {return;}for (String s : children) {deleteFile(path.concat(File.separator).concat(s));}}public static void moveFile(String oldPath, String newPath)throws IOException {copyFile(oldPath, newPath);deleteFile(oldPath);}}我没写注释,但是你肯定看的懂,
解决方案四:
同问~~求牛人解答~~~~~~

时间: 2024-09-18 13:53:28

nio传输对象序列化后的字节码的问题的相关文章

关于对象序列化后,所占数据变大,怎么解决?

问题描述 程序描述:我需要序列化一批对象,为什么序列化后的对象比实际上在内存中的对象占的字节要大,如果我要保持序列化后的对象所占的字节数和对象在内存中所占的字节数一样的化(未序列化之前),我需要怎么调整序列化?///要序列化的类:[Serializable]publicclassMyObject{publicintN1{get;set;}}//序列化50组类,一次递增(第一次,序列化一个,第二次两个,依次递增)for(intj=1;j<=50;j++){List<MyObject>lis

java object c-java中将对象序列化后存入数据库中,IOS系统如何读取

问题描述 java中将对象序列化后存入数据库中,IOS系统如何读取 以前开发Android系统,java语言中将一些对象以序列化形式存入了网站的数据库中,这样用户手机如果是Android的话不会有任何问题.现在开发IOS系统,这样出现的一个难题就是在Object_c语言中如何将原来的已序列化的数据读入到IOS系统中.有什么好的方法及思路,请指教.QQ:102697532mail:mingqixu1@163.com

将对象序列化后 发送到unix的机器 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

问题描述 将类MyClass的实例c序列化后传到unix下.[Serializable]publicclassMyClass{publicinta=0x12345678;}classProgram{staticvoidMain(string[]args){MemoryStreamms=newMemoryStream();MyClassc=newMyClass();BinaryFormatterbf=newBinaryFormatter();bf.Serialize(ms,c);ms.Positi

[Java开发之路](9)对象序列化与反序列化

1. 对象序列化 当你创建对象时,只要你需要,它会一直存在,但是程序终止时,无论何时它都不会继续存在.尽管这样做是非常有意义的,但是在某些情况下,如果程序不运行时扔能存在并且保存其信息,那将对我们非常有用.这样,在下次程序运行时,该对象将被重建并且拥有的信息与程序上次运行时它所拥有的信息相同.当然,我们也可以通过将信息写入文件或者数据库,但是如果能将一个对象声明为是"持久性"的,并为我们处理掉所有的细节,这将会显得十分方便. Java的序列化是将那些实现了Serializable接口的

深入字节码 -- 计算方法执行时间

什么是字节码? java程序通过javac编译之后生成文件.class就是字节码集合,正是有这样一种中间码(字节码),使得scala/groovy/clojure等函数语言只用实现一个编译器即可运行在JVM上. 看看一段简单代码. public long getExclusiveTime() { long startTime = System.currentTimeMillis(); System.out.printf("exclusive code"); long endTime =

.NET 中的对象序列化

对象 简介序列化是指将对象实例的状态存储到存储媒体的过程.在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流.在随后对对象进行反序列化时,将创建出与原对象完全相同的副本. 在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡.只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行.例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化.以下各部分将探讨 .NET 框架提供

Java字节码修改框架ASM

字节码相对Java的意义类似汇编相对C的意义,底层了解的越多越深入,程序就越神奇,一切想法皆有可能实现.学习了下字节码框架ASM,总结分享下: API概述. 一.ASM库提供了两类API接口模型来产生或者修改类字节码: (1)核心API: 基于事件,每个事件代表类的一个元素,如头事件.方法事件.字段事件等.特点是更快耗费更少的内存.(2)树型API: 基于对象树状结构,字段方法等都可以看做对象树的一部分.使用相对简单,但耗费内存. 二.API包结构大致如下: (1)事件.解析器.生产器类API在

Java字节码浅析(二)

英文原文链接,译文链接,原文作者:James Bloom,译者:有孚 条件语句 像if-else, switch这样的流程控制的条件语句,是通过用一条指令来进行两个值的比较,然后根据结果跳转到另一条字节码来实现的. 循环语句包括for循环,while循环,它们的实现方式也很类似,但有一点不同,它们通常都会包含一条goto指令,以便字节码实现循环执行.do-while循环不需要goto指令,因为它的条件分支是在字节码的末尾.更多细节请参考循环语句一节. 有一些指令可以用来比较两个整型或者两个引用,

对象序列化反序列化例子

using System; using System.IO; using System.Xml.Serialization; [Serializable] public class Model { public string Name{get;set;} public string Possword{get;set;} public override string ToString() { return "Name:"+ Name+"possword:"+Possw