Java 笔记10

classObjectOutputStream也是过滤流,使节点流直接获得输出对象。

最有用的方法:WriteObject(Object b)

用流传输对象称为对象的序列化,但并不使所有的对象都可以进行序列化的。只有在实现类时必须实现一个接口:IO包下的Serializable(可序列化的)。此接口没有任何的方法,这样的接口称为标记接口。

Class Studentimplements Serializable

把对象通过流序列化到某一个持久性介质称为对象的可持久化。

Hibernate就是研究对象的可持久化。

ObuectInputStream  in =new  ObjectInputStream;

Objecto1=in.readObuect();

Students1=(Student)o1;

注意:因为o1是一个对象,因为需要对其进行保存。

 

Transient用来修饰属性。

 Transient int num;

表示当我们对属性序列化时忽略这个属性(即忽略不使之持久化)。

所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。

判断是否一个属性或对象可序列化:Serialver。

Serialver TestObject(TestObject必须为已经编译)

执行结果:如果不可序列化;则出现不可序列化的提示。如果可以序列化,那么就会出现序列化的ID:UID。

java.until.*有

StringTokenizer(参数1,参数2)按某种符号隔开文件

StringTokenizer(s,”:”)用“:”隔开字符,s为对象。

 

练习:将一个类序列化到文件,然后读出。下午:

1、  网络基础知识

2、  JAVA网络编程

 

网络与分布式集群系统的区别:每个节点都是一台计算机,而不是各种计算机内部的功能设备。

Ip:具有全球唯一性,相对于internet,IP为逻辑地址。

端口(port):一台PC中可以有65536个端口,进程通过端口交换数据。连线的时候需要输入IP也需要输入端口信息。

计算机通信实际上的主机之间的进程通信,进程的通信就需要在端口进行联系。

192.168.0.23:21

协议:为了进行网络中的数据交换(通信)而建立的规则、标准或约定。

不同层的协议是不同的。

 

网络层:寻址、路由(指如何到达地址的过程)

传输层:端口连接

TCP模型:应用层/传输层/网络层/网络接口

端口是一种抽象的软件结构,与协议相关:TCP23端口和UDT23端口为两个不同的概念。

端口应该用1024以上的端口,以下的端口都已经设定功能。

套接字(socket)的引入:

Ip+Port=Socket(这是个对象的概念。)

Socket为传输层概念,而JSP是对应用层编程。例:

java.net.*;

(Server端定义顺序)

ServerSocket(intport)

Socket.accept();//阻塞方法,当客户端发出请求是就恢复

如果客户端收到请求:

则Socket SI=ss.accept();

注意客户端和服务器的Socket为两个不同的socket。

Socket的两个方法:

getInputStream():客户端用

  getOutputStream() 服务器端用

使用完毕后切记Socket.close(),两个Socket都关,而且不用关内部的流。

在client端,Sockets=new Socket(“127.0.0.1”,8000);

127.0.0.1为一个默认本机的地址。

练习:

1、  客户端向服务器发出一个字符串,服务器转换成大写传回客户端。

大写的函数:String.toUpperCase()

服务器告诉客户端:“自开机以来你是第n 个用户”。pan st�b'o�o����12.0pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>定位。

Mode(“r”:随机读;”w”:随机写;”rw”:随机读写)

练习:写一个类A,JAVAA file1 file2

file1要求是系统中已经存在的文件。File2是还没有存在的文件。

执行完这个命令,那么file2就是file1中的内容。

 

字符流:reader\write只能输纯文本文件。

FileReader类:字符文件的输出

 

字节流与字符流的区别:

字节流的字符编码:

字符编码把字符转换成数字存储到计算机中,按ASCii将字母映射为整数。

把数字从计算机转换成相应的字符的过程称为解码。

编码方式的分类:

ASCII(数字、英文):1个字符占一个字节(所有的编码集都兼容ASCII)

ISO8859-1(欧洲):1个字符占一个字节

GB-2312/GBK:1个字符占两个字节

Unicode: 1个字符占两个字节(网络传输速度慢)

UTF-8:变长字节,对于英文一个字节,对于汉字两个或三个字节。

 

原则:保证编解码方式的统一,才能不至于出现错误。

Io包的InputStreamread称为从字节流到字符流的桥转换类。这个类可以设定字符转换方式。

OutputStreamred:字符到字节

Bufferread有readline()使得字符输入更加方便。

在I/O流中,所有输入方法都是阻塞方法。

Bufferwrite给输出字符加缓冲,因为它的方法很少,所以使用父类printwrite,它可以使用字节流对象,而且方法很多。

 

练习:做一个记事本

swing/JfileChoose:getSelect file()

InputStreeamReader:把字节变为字符

JAVA中对字符串长无限制  bufferedReader(ir)

()

 

释放锁标记只有在Synchronized代码结束或者调用wait()。

注意锁标记是自己不会自动释放,必须有通知。

注意在程序中判定一个条件是否成立时要注意使用WHILE要比使用IF要严密。

WHILE会放置程序饶过判断条件而造成越界。

补充知识:

suspend()是将一个运行时状态进入阻塞状态(注意不释放锁标记)。恢复状态的时候用resume()。Stop()指释放全部。

这几个方法上都有Deprecated标志,说明这个方法不推荐使用。

 

一般来说,主方法main()结束的时候线程结束,可是也可能出现需要中断线程的情况。对于多线程一般每个线程都是一个循环,如果中断线程我们必须想办法使其退出。


如果主方法main()想结束阻塞中的线程(比如sleep或wait)

那么我们可以从其他进程对线程对象调用interrupt()。用于对阻塞(或锁池)会抛出例外InterruptedException。

这个例外会使线程中断并执行catch中代码。

 

多线程中的重点:实现多线程的两种方式,Synchronized,以及生产者和消费者问题(ProducerConsumer.java文件)。

 

练习:

①  存车位的停开车的次序输出问题;

②  写两个线程,一个线程打印1-52,另一个线程答应字母A-Z。打印顺序为12A34B56C……5152Z。通过使用线程之间的通信协调关系。

注:分别给两个对象构造一个对象o,数字每打印两个或字母每打印一个就执行o.wait()。在o.wait()之前不要忘了写o.notify()。

 

补充说明:通过Synchronized,可知Vector较ArrayList方法的区别就是Vector所有的方法都有Synchronized。所以Vector更为安全。

同样:Hashtable较HashMap也是如此。

时间: 2024-10-03 12:19:19

Java 笔记10的相关文章

操作系统概念学习笔记 10 CPU调度

操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率. 对于单处理器系统,每次只允许一个进程运行:任何其他进程必须等待,直到CPU空闲能被调度为止. 多道程序的目标是在任何时候都有某些进程在运行,以使CPU的使用率最大化.多道程序的思想较为简单,当一个进程必须等待时,操作系统会从该进程拿走CPU的使用权,而将CPU交给其他进程. CPU-I/O 区间周期 CPU的成功调度依赖于进程的如下属性: 进程执行由CPU执行周期和I/O等

thinkphp学习笔记10—看不懂的路由规则

原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂.   1.路由定义 要使用路由功能需要支持PATH_INFO,PATH_INFO是什么呢?手册中提到"要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能)," , url支持path_info,不是apache要支持path_info么,度娘讲的还算清楚一点,见下文: p

YourKit Java Profiler 10.0发布 Java和.NET程序分析工具

YourKit Java Profiler是一个CPU和内存分析工具,也是一个Java和http://www.aliyun.com/zixun/aggregation/13480.html">.NET程序性能分析工具,可以很容易地解决CPU和内存相关的性能问题.它具有自动检漏,内存分配分析的强大工具,对象堆浏览器,全面的内存测试作为JUnit测试过程的一部分,分析的开销非常低,支持透明deobfuscation,并与Eclipse.JBuilder.IntelliJ.IDEA.NetBea

深入Java虚拟机读书笔记[10:20]

第十章 栈和局部变量操作 第十一章 类型转换 第十二章 整数运算 第十三章 逻辑运算 第十四章 浮点运算 第十五章 对象和数组 第十六章 控制流 第十七章 异常 以上一些是操作码相关的内容, 第十八章 finally子句 微型子例程 字节码中的finally子句表现的很像微型子例程.Java方法与微型子例程使用不同的指令集.跳转到微型子例程的指令是jsr或者jsr_w,将返回地址压入栈.执行完毕后调用ret指令.ret指令并不会从栈中弹出返回地址,而是在子例程开始的时候将返回地址从栈顶取出存储在

Java笔记:Java内存模型

1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记.以下内容摘自 <深入理解Java内存模型>读书总结 并发 定义:即,并发(同时)发生.在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. 并发需要处理两个关键问题:线程之间如何通信及线程之间如何同步. 通信:是指线程之间如何交换信息.在命令式编程中,线程之间的通信机制

Java基础-10总结形式参数,包,修饰符,内部类

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 类,抽象类,接口的综合小练习 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识: 分析,这个案例中有哪些

java笔记十一:动态编译

JDK6.0推出了动态编译的新功能,能够在程序中动态的写一个类,再对之进行编译.编译成class文件后就可以通过类加载方式把动态编译的类加载到内存中.当然也能通过RunTime类调用javac命令来动态编译. 动态编译类的主要步骤: ①.写一个字符串,这个字符串就是要编译的类的全部内容. ②.通过输出流,把该字符串的内容写到工程下面指定的包中. ③.对创建的java文件进行编译. 动态编译涉及的类有JavaCompiler.StandardJavaFileManager,具体如何编译看下面的例子

java笔记九:对象序列化与反序列化

在java程序运行过程中,有许多的对象同时存在,但是程序结束运行或者JVM停止运行时这些对象都会消失.如何将这些对象保存起来以便下一次 再将这些对象读入内存呢?或者如何将某些对象通过网络传到另一端的java程序?实施对象的这种操作叫做对象的序列化(或者叫做持久化),重新读入内存叫 做反序列化. 基本数据类型的包装类和所有容器类都可以被序列化.用户自定义的类默认是不可以被序列化的.如果想要自己定义的类可以序列化就必须让这个类实现java.io.Serializable接口. 下面看一个Demo:

java笔记三:List接口

List承诺可以将元素维护在特定的序列中.List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和删除元素.List与 set 不同,列表通常允许重复的元素.并且存放的顺序与插入的顺序一致. List接口的常用方法有: **[add](http://www.cnblogs.com/java/util/List.html#add(E))**([E](http://www.cnblogs.com/java/util/List.html "List 中的类型参数&qu