我试图理解序列化/反序列化如何在不使用库的情况下在C++中工作.我从简单的对象开始,但是当反序列化向量时,我发现,如果没有先写入它的大小,我就无法获得向量.而且,我不知道应该选择哪种文件格式,因为如果在向量大小之前存在数字,我就无法正确读取它.此外,我想用类和映射容器来做到这一点.我的任务是序列化/反序列化这样的对象:
PersonInfo
{
unsigned int age_;
string name_;
enum { undef, man, woman } sex_;
}
Person : PersonInfo
{
vector<Person> children_;
map<string, PersonInfo> addrBook_;
}
Run Code Online (Sandbox Code Playgroud)
目前我知道如何序列化这样的简单对象:
vector<PersonInfo> vecPersonInfo;
vecPersonInfo.push_back(*personInfo);
vecPersonInfo.push_back(*oneMorePersonInfo);
ofstream file("file", ios::out | ios::binary);
if (!file) {
cout<<"can not open file";
} else {
vector<PersonInfo>::const_iterator iterator = vecPersonInfo.begin();
for (; iterator != vecPersonInfo.end(); iterator++) {
file<<*iterator;
}
Run Code Online (Sandbox Code Playgroud)
能否请您建议,我如何为这个复杂的对象或一个能够清楚解释它的好教程做到这一点?
我想知道当前的汽车速度,并通过一条路.我有一部带加速计和陀螺仪的Android手机,它给我发了数据.这是坐标电话系统中的数据可能与汽车的坐标系统不一样.
如何将这种加速度和旋转转换为坐标系的汽车系统?
我在我的应用中遇到了这个问题.这很难发现.这是一个堆栈:
2012-11-30 08:42:22.745myapp.package.MyCommand is failed.java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:542)
at libcore.io.IoBridge.recvfrom(IoBridge.java:506)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:252)
at myapp.package.HttpCommand.executeRequest(HttpCommand.java:176)
at myapp.package.HttpCommand.execute(HttpCommand.java:83)
at myapp.package.NetworkService$1.run(NetworkService.java:60)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: libcore.io.ErrnoException: recvfrom failed: ETIMEDOUT (Connection timed out)
at libcore.io.Posix.recvfromBytes(Native Method)
at …
Run Code Online (Sandbox Code Playgroud) 我是Spring的新手,从简单的教程开始.我定义了简单的jsp和Controller,然后将它映射到xml文档并运行它,但只有我看到的是我的wev页面没有我在controler中传递的值:
@Controller
public class HomeController {
@Autowired
private ExampleService exampleService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
model.addAttribute("serverTime", exampleService.getSystemTime());
model.addAttribute("appVersion", exampleService.getAppVersion());
return "home";
}
}
@Component
public class ExampleService {
@Value("#{appProperties.appVersion}")
private String appVersion;
/**
* Returns formatted system time.
*
* @return
*/
public String getSystemTime() {
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
return dateFormat.format(new Date());
}
public String getAppVersion() {
return appVersion;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> …
Run Code Online (Sandbox Code Playgroud) 我继续学习maven并尝试理解为什么当org.springframework.web dependecy已经在pom中定义时,我得到这个错误包"org.springframework.web.servlet不存在".
<groupId>com.home.springtraining</groupId
<artifactId>SpringTrainingTemplate</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringTrainingTemplate</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>3.1.1.RELEASE</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么会出现这个错误吗?
我希望有一个可以从不同线程读/写的标志,没有任何脏值问题.是否足以使其静态挥发?
static volatile boolean flag;
Run Code Online (Sandbox Code Playgroud) 我从几个网址解析一些东西并在数据库中插入数据.我想现在同时这样做.我创建一个线程池并在单独的线程中运行链接.但这不安全.我决定从web获取数据并将其保存到数据库的synchronized方法,如下所示:
synchronized (this) {
Parser parser = new Parser(link);
feeds = parser.parse();
model.insertFeeds(feeds, link);
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法阻止了对其他线程的Web和数据库的访问,直到当前线程解析数据并插入(这是他工作的99%),所以看起来它们执行的不止一个,而不是并行.
你能说出这样的事情有什么更好的解决方案吗?