OC:关于Itunes你了解多少?
在苹果电脑里有一个 iTunes
简单的说iTunes是苹果公司开发的一个应用程序,由苹果电脑在2001年1月10日于旧金山的 Macworld Expo 推出的一款数字媒体播放应用程序,用于播放以及管理数字音乐和与视频档案,我们可以认为是一个数字播放器。官方解释:iTunes 是一个供 Mac 和 PC 使用的免费应用程序,能播放你所有的数字音乐和视频、将你所有的媒体文件收藏导入 iPod。精彩娱乐生活的所有一切,iTunes 随时随地为你准备就绪。
iTunes 是一款播放器应用程序,其主要功能有:
使用者能够将他们的音乐组成播放清单、编辑档案资讯、烧录 CD 、复制档案到苹果公司的MP3播放器iPod、透过它内建的 Music Store 购买音乐、下载 Podcast 、备份歌曲到一张 CD 或者 DVD 上、执行视觉化和编码音乐成为许多不同的音频格式。
随身iTunes功能,轻松将苹果电脑上的音乐或视频导入到如 iPod等移动设备
如何将你 Mac 或 PC 上的音乐和视频导入 iPod? iTunes 帮你搞定。那么照片、通讯录和日历呢? iTunes 亦能传送。如果想将电脑中这些资料都同步到 iPod,用 iTunes 就行了。你可以在无线网络覆盖的任何区域,直接从 iPod 下载应用程序, Apple TV 的无线同步功能,更可以将 iTunes 资料库中的音乐、影片和照片在大屏幕上播放。
什么是序列化,以及为什么要序列化 参考
简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!
问题的引出:
如上所述,读写对象会有什么问题呢?比如:我要将对象写入一个磁盘文件而后再将其读出来会有什么问题吗?别急,其中一个最大的问题就是对象引用!举个例子来说:假如我有两个类,分别是A和B,B类中含有一个指向A类对象的引用,现在我们对两个类进行实例化{ A a = new A(); B b = new B(); },这时在内存中实际上分配了两个空间,一个存储对象a,一个存储对象b,接下来我们想将它们写入到磁盘的一个文件中去,就在写入文件时出现了问题!因为对象b包含对对象a的引用,所以系统会自动的将a的数据复制一份到b中,这样的话当我们从文件中恢复对象时(也就是重新加载到内存中)时,内存分配了三个空间,而对象a同时在内存中存在两份,想一想后果吧,如果我想修改对象a的数据的话,那不是还要搜索它的每一份拷贝来达到对象数据的一致性,这不是我们所希望的!
以下序列化机制的解决方案:
1.保存到磁盘的所有对象都获得一个序列号(1, 2, 3等等)
2.当要保存一个对象时,先检查该对象是否被保存了。
3.如果以前保存过,只需写入"与已经保存的具有序列号x的对象相同"的标记,否则,保存该对象
通过以上的步骤序列化机制解决了对象引用的问题!
序列化的实现
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
在序列化的过程中,有些数据字段我们不想将其序列化,对于此类字段我们只需要在定义时给它加上transient关键字即可,对于transient字段序列化机制会跳过不会将其写入文件,当然也不可被恢复。但有时我们想将某一字段序列化,但它在SDK中的定义却是不可序列化的类型,这样的话我们也必须把他标注为transient,可是不能写入又怎么恢复呢?好在序列化机制为包含这种特殊问题的类提供了如下的方法定义:
private void readObject(ObjectInputStream in) throws
IOException, ClassNotFoundException;
private void writeObject(ObjectOutputStream out) throws
IOException;
(注:这些方法定义时必须是私有的,因为不需要你显示调用,序列化机制会自动调用的)
使用以上方法我们可以手动对那些你又想序列化又不可以被序列化的数据字段进行写出和读入操作。
下面是一个典型的例子,java.awt.geom包中的Point2D.Double类就是不可序列化的,因为该类没有实现Serializable接口,在我的例子中将把它当作LabeledPoint类中的一个数据字段,并演示如何将其序列化!
import java.io.*;
import java.awt.geom.*;
public class TransientTest
{
public static void main(String[] args)
{
LabeledPoint label = new LabeledPoint("Book", 5.00, 5.00);
try
{
System.out.println(label);// 写入前
ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("Label.txt"));
out.writeObject(label);
out.close();
System.out.println(label);// 写入后
ObjectInputStream in = new ObjectInputStream(new
FileInputStream("Label.txt"));
LabeledPoint label1 = (LabeledPoint) in.readObject();
in.close();
System.out.println(label1);// 读出并加1.0后
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class LabeledPoint implements Serializable
{
public LabeledPoint(String str, double x, double y)
{
label = str;
point = new Point2D.Double(x, y);
}
private void writeObject(ObjectOutputStream out) throws IOException
{
out.defaultWriteObject();
out.writeDouble(point.getX());
out.writeDouble(point.getY());
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
in.defaultReadObject();
double x = in.readDouble() + 1.0;
double y = in.readDouble() + 1.0;
point = new Point2D.Double(x, y);
}
public String toString()
{
return getClass().getName()+ "[label = " + label+ ", point.getX() = " + point.getX()+ ", point.getY() = " + point.getY()+ "]";
}
private String label;
transient private Point2D.Double point;
}
}
转载于:https://www.cnblogs.com/benpaobadaniu/p/4758417.html
OC:关于Itunes你了解多少?相关推荐
- Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解
这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...
- OC swift 一些常用第三方收集整理 (第三方集合)
整理了Xcode好用的插件,包括OC和Swift,信息更详细和完整 下拉刷新 EGOTableViewPullRefresh– 最早的下拉刷新控件. SVPullToRefresh– 下拉刷新控件. ...
- OC中常用的英文发音和注解
OC中常用的英文 A atomic [əˈtɑːmɪk] 原子性,就是防止在未完成的时候被另外一个线程读取,造成数据错误 B barrier /ˈbæriər/ GCD异步栅栏函数:dispatch_ ...
- OC中常见面试题汇整篇
当页面跳转的时候,如何实现导航条和页面同时出现?因为他两个经常出现不同步的现象? 如何将tablview强制转换成UIScrollow? 当一个界面在6s上正好可以完全呈现,那在4s上面你是如何处理的 ...
- OC 组合实现多继承
OC无法完全先C++使用多继承,但可以采用组合的模式来代替继承模式.(协议实现)实现多继承的代码:举例现在ClassC需要继承ClassA中methodA.ClassB中methodB,具体的代码为: ...
- OC实用转换model的工具
OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点 ...
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate(转)
一.NSNumber OC数组类NSArray,它只能存放 OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的 NS ...
- OC学习篇之---对象的拷贝
在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来 ...
- OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法
一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...
最新文章
- 18.移动架构数据库升级解决方案
- react native 报错:cannot read property 'length' of undefined
- 从零开始入门 K8s | 理解 RuntimeClass 与使用多容器运行时
- 一文了解Redis持久化
- linux服务器拓扑图,Linux服务器作为网关的DNS分离解析服务(CentOS 7版本)
- magento2 后台Grid点击column进行排序时会出现单个重复record
- 【Hadoop】同步集群时间
- java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layou
- Leetcode刷题记录:构建最大数二叉树
- oracle怎样停止到数据,oracle启动和停止
- 教孩子学编程python语言pdf_教孩子学编程 PYTHON语言版 PDF 下载
- 使用python多进程批量转换word为PDF
- 现金流量表的编制 (by shany shang)
- 父亲节用计算机给惊喜,我们为你准备了父亲节惊喜!点击领取!
- events_statements_history_long,events_statements_history mysql语句存储
- wps下载的简历无法删除空白页
- 如何辨别手机屏幕材质
- gzip and deflate
- 禁用一个右下角广告弹窗的程序 popwndexe.exe
- 惊悚恐怖好片推荐(喜欢看片的朋友们看过来)
热门文章
- llt自发光_“贝爷”联名款海系列新品得物独家首发,呼吁年轻人保护海洋环境...
- magic4.0什么时候升级鸿蒙,科技知识:magic4.0什么时候更新 magic4.0更新时间介绍...
- 从《青云志》看完美世界如何玩转影游联动,打造S级手游
- js_元素的隐藏与显示
- 广工计算机学院绩点,广工平均学分绩点计算器的教程
- mvc html 多行文本框,asp.net-mvc – 如何在MVC3中为多行文本框创建多个编辑器模板?...
- linux查看hbase集群状态,hbase 集群部署
- 企业邮箱服务器搭建,如何搭建企业邮箱服务器
- 网管软件在保险行业的应用
- 使用barrier共享键鼠