我已经看到了这个:如何在java中测试一个类正确地实现了可序列化
我只是有一个更普遍的问题.如果你创建一个这样的对象(比如一个圆圈)(假设有进口):
class Circle implements Serializable {
int radius;
Circle(int radius){
this.radius = radius;
}
public void updateRadius(int radius){
this.radius = radius
}
public int getRadius(){
return radius;
}
}
Run Code Online (Sandbox Code Playgroud)
它是否需要可序列化所需的全部内容?我是否需要添加更多方法才能正确序列化?我有一个更复杂的课程,但是当这应该提供充足的例子时,并不想发布所有的课程.
如何以区分大小写的方式反序列化字符串?看起来序列化是区分大小写的,反序列化的重点是不区分大小写?

更新:尝试本地化底层的地方和内容,我已经设置了DEBUGGER来下载符号并进入FCL .NET代码.我已经卡在这些代码附近(DbConnectionOptions.cs第873-921行):
private static NameValuePair ParseInternal(Hashtable parsetable, string connectionString, bool buildChain, Hashtable synonyms, bool firstKey) {
Debug.Assert(null != connectionString, "null connectionstring");
StringBuilder buffer = new StringBuilder();
NameValuePair localKeychain = null, keychain = null;
int nextStartPosition = 0;
int endPosition = connectionString.Length;
while (nextStartPosition < endPosition) {
int startPosition = nextStartPosition;
string keyname, keyvalue;
nextStartPosition = GetKeyValuePair(connectionString, startPosition, buffer, firstKey, out keyname, out keyvalue);
if (ADP.IsEmpty(keyname)) {
// if (nextStartPosition != endPosition) { throw; }
break;
}
string realkeyname …Run Code Online (Sandbox Code Playgroud) 我正在尝试递归循环遍历树结构并使用(语言)C将其序列化为字符串.当谈到C(来自Java,C#,动作脚本背景)时,我是一个真正的新手.一般来说,我很难掌握一些东西.
我应该使用库来帮助生成XML吗?如何使用C实现递归?
谢谢
我喜欢这个,
Class P {
pub int id;
pub P(id) { this.id = id; }
...
pub Set<Integer> parentTTList;
}
Class TT {
pub int id;
pub TT(id) { this.id = id; }
pub List<P> manyPList;
}
List<TT> manyTTList;
Then TT tA = new TT(1), tB = new TT(2);
P pX = new P(-1), pY = new P(-2);
tA.manyPList.add(pY); pY.parentTTList.add(tA.id);
tA.manyPList.add(pX); pX.parentTTList.add(tA.id);
tB.manyPList.add(pY); pY.parentTTList.add(tB.id);
Run Code Online (Sandbox Code Playgroud)
然后使用ObjectOutputStream将tA和tB序列化为byteArray,我们在byteArray中有多少次pY?Calss P和TT有很多关系,我们有太多人担心尺寸.
在java中保存对象(使用序列化)时,文件在哪里创建?
例如,如果您使用此方法http://www.rgagnon.com/javadetails/java-0075.html
我现在遇到了通过TCP反序列化对象的问题.
反序列化时,我得到以下SerializationException(下面的代码):
附加信息:二进制流'0'不包含有效的BinaryHeader.可能的原因是序列化和反序列化之间的无效流或对象版本更改.
序列化代码:
public static void SerializeRO(Stream stream, ReplicableObject ro) {
MemoryStream serializedObjectStream = new MemoryStream();
Formatter.Serialize(serializedObjectStream, ro);
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(serializedObjectStream.Length);
serializedObjectStream.WriteTo(stream);
serializedObjectStream.Close();
bw.Close();
}
Run Code Online (Sandbox Code Playgroud)
反序列化代码:
public static List<ReplicableObject> ParseStreamForObjects(Stream stream) {
List<ReplicableObject> result = new List<ReplicableObject>();
while (true) {
if (!(stream as NetworkStream).DataAvailable) break;
BinaryReader br = new BinaryReader(stream);
int length = br.ReadInt32();
byte[] bytes = br.ReadBytes(length);
MemoryStream ms = new MemoryStream(bytes);
ms.Position = 0;
// ERROR OCCURS ON THE LINE BELOW
result.Add((ReplicableObject) Formatter.Deserialize(ms));
ms.Close(); …Run Code Online (Sandbox Code Playgroud) 我收到以下错误: -
消息:unserialize()function.unserialize:错误65517字节的偏移量65517
反序列化是否具有最大大小?
这是PHP中的问题:
$array = unserialize($emails);
// this is the output of $emails (not all of it as it is huge)
string(65535) "a:12134:{i:0;s:29:"12someemail@addr.com ";i:1;s:31:"5myname@email.com "
Run Code Online (Sandbox Code Playgroud) 我有要发送给PHP控制器的复选框(都具有相同的'name'属性).这是我的标记的简短片段:
<script type="text/javascript">
$(document).ready(function(){
$(".someButton").click(function(){
$.post("my_controller.php",$("#userForm").serialize());
});
});
</script>
<?php
echo '<form id="userForm">';
foreach($users as $user)
{
echo '<input name="user_id" value="'.$user->id.'">';
}
echo '</form>';
?>
Run Code Online (Sandbox Code Playgroud)
然后,我希望我的控制器将这些值作为统一数组发送到模型,然后可以执行foreach语句.控制器逻辑应该(我认为)是这样的:
foreach($_POST['user_id'] as $user_id)
{
$user_array[] = $user_id;
}
$this->model->method($user_array);
Run Code Online (Sandbox Code Playgroud)
但我不断收到诸如"为foreach()提供的无效参数"之类的错误,因为除了第一个之外,我认为它没有得到任何其他值.我哪里错了?
这两个函数是我尝试序列化QVector.不幸的是,我不能使用QDataStream,因为我的老板要求实现是Qt独立的,而QDataStream会预先设置一个头.所以问题是函数binToVector返回的向量返回的大小等于0,但是如果元素被打印,则它们等于原始向量.如果向量的元素等于原始元素,为什么返回的大小为零?这些序列化功能还可以吗?我不能使用boost和Qt函数来实现它,只能使用C++;
QByteArray vectorToBin(const QVector<qint32> & vec)
{
QByteArray result;
foreach(quint32 e, vec) {
char *src = reinterpret_cast<char*>(&e);
result.append(src, sizeof(qint32));
}
return result;
}
QVector<qint32> binToVector(const QByteArray & bytes)
{
int size = sizeof(qint32);
QVector<qint32> result;
result.reserve(bytes.count()/size);
int j=0;
for(int i=0; i<bytes.count(); i+=size) {
memcpy(&result[j++], bytes.constData()+i, size);
}
return result;
}
Run Code Online (Sandbox Code Playgroud) 我正在获取一个httpwebresponse流(一个flash文件),我想将它保存为二进制文件,然后访问该二进制文件并将其显示为flash.现在,我正在将响应流写入MemoryStream,然后在MemoryStream上调用ToArray().我得到一个方便的字节[].
我该如何扭转这个功能?如何从我生成的byte []中获取flash文件的流?
谢谢!