IO 文件零拷贝
This commit is contained in:
parent
a9299d605b
commit
912b4ac090
157
C++书单.md
Normal file
157
C++书单.md
Normal file
@ -0,0 +1,157 @@
|
||||
# C++书单
|
||||
|
||||
------
|
||||
|
||||
- 《C++ Primer Plus》
|
||||
- 看来几章,但是对于对我来讲,太过基础了,没有什么编程知识的人适合看这个
|
||||
- 不太可能继续看
|
||||
- 《深入实践C++模板编程》
|
||||
- 模板元编程的入门书籍,推荐
|
||||
- 正在看,我想我会看它第二遍
|
||||
- 《深入理解C++11》
|
||||
- 推荐:⭐⭐⭐⭐
|
||||
- 当前进度:正在看
|
||||
- 《C++语言的设计和演化》
|
||||
- 推荐:
|
||||
- 评价:
|
||||
- 当前进度:
|
||||
- 《C++程序设计语言》
|
||||
- 推荐:⭐⭐⭐⭐⭐
|
||||
- 评价:
|
||||
- C++之父写的,看一遍是绝对不够的!!!!!!
|
||||
- 这绝对不是什么入门书籍!!!有一定基础的人再来看效果可能更好
|
||||
- 当前进度:第16、17章看完了。 暂停
|
||||
- 《深入探索C++对象模型》
|
||||
- 推荐:⭐⭐⭐⭐⭐
|
||||
- 评价:这书真的写的很好,虽然中文翻译不怎么样,如果不是内容太好,我真的撑不下去,会看第二遍
|
||||
- 当前进度:看完了
|
||||
- 《Effective C++ 》
|
||||
- 推荐:❤️❤️❤️❤️❤️
|
||||
- 评价:
|
||||
- 信息密度很高,推荐。
|
||||
- 这是我看过的写的最好的技术书籍之一
|
||||
- 第6章写的实在太好了,已买书收藏。
|
||||
- 会看第二遍
|
||||
- 当前进度:看完了,名不虚传, 我觉得是写C++必读的书籍,就算你不打算全部看完,至少也要看完第六章
|
||||
- 《More Effective C++ 》
|
||||
- 推荐:⭐⭐⭐
|
||||
- 评价:
|
||||
- 感觉我的时间被浪费了
|
||||
- 这跟《Effective C++ 》真的是一个作者吗,质量相差太大了,我很失望。
|
||||
- 这是我近期读过的技术书中最难看的一本。准确评分应该是三星半。
|
||||
- 当前进度:看完了大部分【近期不打算再看了,冷藏】
|
||||
- 《C++ Boost程序库完全开发指南》
|
||||
- 推荐:⭐⭐⭐⭐⭐
|
||||
- 评价:
|
||||
- 豆瓣评分居然这么多差评,至于吗,(豆瓣)对国产作者也苛刻了吧,为此加一星。
|
||||
- 当然,学习boost最好的资料是官方文档,但是谁让我有这本📕呢,我一定会看完它的!
|
||||
- 当前进度:正在看(暂停)
|
||||
- 《Effective STL》
|
||||
- 当前进度:看到第3节,暂停
|
||||
- 《Exceptional C++ 》
|
||||
- 《STL源码剖析》
|
||||
|
||||
------
|
||||
|
||||
- 2021/5.20: C++语法特性暂停,我觉得我已经学的差不多了,需要一点实践,实践完了之后再回头看。接下来打算看网络编程的书籍
|
||||
|
||||
------
|
||||
|
||||
- 《HTTP权威指南》
|
||||
- 推荐:💚💚💚
|
||||
- 评价:对HTTP协议感兴趣的可以看看,还是挺有用的
|
||||
- 当前进度:走马观花的看完了,还是挺有用的
|
||||
- 《Linux-UNIX系统编程手册》
|
||||
- 推荐:❤️❤️❤️❤️💚
|
||||
- 评价:孤篇横绝,竟为大家
|
||||
- 当前进度:看到第58章,暂停
|
||||
- 《TCP-IP高效编程:改善网络程序的44个技巧》
|
||||
- 推荐:💚💚💚💚
|
||||
- 评价:谁翻译的?译者语文不好吗?还不如机器翻译呢!!!内容ok,翻译烂
|
||||
- 当前进度:正在看
|
||||
- 《TCP/IP详解:卷二》
|
||||
- 4.4BSD-Lite源码的下载地址: http://ftp.icm.edu.pl/packages/4.4BSD-Lite/ https://pub.allbsd.org/bsd-sources/
|
||||
- 《用TCP_IP进行网际互联:设计、实现与内核 (卷2)》
|
||||
- 推荐:
|
||||
- 评价:
|
||||
- 信息密度很高,读来有种原来如此的感觉,将买书收藏,常看常新
|
||||
- 被安利了操作系统课程,以及对Xinu的源码感兴趣了
|
||||
- 感觉网友说的“比TCP/IP详解”更好是有道理的
|
||||
- 这书的源码网上没有找到。
|
||||
- 当前进度:正在看
|
||||
- 《用TCP_IP进行网际互联:客户-服务器编程与应用(Linux版) (卷3)》
|
||||
- 推荐:❤️❤️❤️💚💚
|
||||
- 评价:
|
||||
- 这书我想买下来收藏,适合有一定基础的人看
|
||||
- 第1到17章质量很高,后面的就比较拉胯了
|
||||
- 当前进度:看到第26章,暂停
|
||||
- 《TCP/IP详解卷1:协议》
|
||||
- 推荐:
|
||||
- 评价:
|
||||
- 当前进度:
|
||||
- 正在看(2021/06/07)
|
||||
- 暂停,因为我觉得它不说人话(2021/06/08)
|
||||
- 《TCP/IP网络编程》
|
||||
- 推荐:
|
||||
- 评价:
|
||||
- 《Unix/Linux编程实践教程》
|
||||
- 推荐:
|
||||
- 评价:
|
||||
- 当前进度:
|
||||
- 《一本书读懂TCP_IP》
|
||||
- 推荐:🌒
|
||||
- 评价: 不推荐,为什么这样的书也能出版
|
||||
- 当前进度: 已看完
|
||||
|
||||
------
|
||||
|
||||
- Linux高性能服务器编程
|
||||
- Linux多线程服务器端编程(选看)
|
||||
- UNIX 环境高级编程
|
||||
- UNIX网络编程卷1(必看,五星推荐)
|
||||
|
||||
零.手册类:
|
||||
|
||||
- 《C++程序设计语言(The C++ Programming Language)》
|
||||
- 《C++标准程序库(C++ Standard Library Tutorial and Reference) 》
|
||||
- 《The C++ IO Streams and Locales》
|
||||
- 《The C++ Standard (INCITS/ISO/IEC 14882-2011)》
|
||||
- 《Overview of the New C++ (C++11/14) 》
|
||||
- 《The Standard C Library》
|
||||
|
||||
一.初级入门系列:
|
||||
|
||||
- 《C++ Primer》
|
||||
- 《Accelerated C++》
|
||||
- 《C++编程思想(Thinking in C++) 》
|
||||
- 《C++程序设计原理与实践(Programming: Principles and Practice Using C++ )》
|
||||
- 《C++初学者指南》
|
||||
- 《Visual.C++.2008入门经典》
|
||||
- 《面向对象程序设计—C++语言描述》
|
||||
- 《数据结构(C++语言版)第三版_邓俊辉》
|
||||
|
||||
二.实用系列:
|
||||
|
||||
- 《深入浅出设计模式》
|
||||
- 《设计模式:可复用面向对象软件的基础》
|
||||
- 《HeadFirst设计模式》
|
||||
- 《大话设计模式》
|
||||
|
||||
三.中级进阶系列:
|
||||
|
||||
- 《C++ templates》
|
||||
- 《More Exceptional C++》
|
||||
- 《Exceptional C++ Style》
|
||||
- 《C++编程规范(C++ Coding Standards) 》
|
||||
- 《C++ 模板完全指南(C++ Templates: The Complete Guide)》
|
||||
- 《Beyond the C++ Standard Library(Boost)》
|
||||
- 《C和C++安全编码》
|
||||
|
||||
四.高级成神系列:
|
||||
|
||||
- 《C++设计新思维-泛型编程与设计模式之应用(Modern C++ Design ) 》
|
||||
- 《C++模板元编程(C++ Template Metaprogramming)》
|
||||
- 《C++ Concurrency In Action》
|
||||
- 《Advanced c++ Programming Styles and Idioms 》
|
||||
- 《Real-Time C++ Efficient Object-Oriented and Template Microcontroller Programming》
|
||||
- 《Advanced_Metaprogramming_in_Classic_C 》
|
@ -4,7 +4,6 @@ import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.SocketChannel;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class NIOClient {
|
||||
public static void main(String[] args) {
|
||||
|
@ -0,0 +1,29 @@
|
||||
package cn.zyjblogs.netty.nio.zerocopy;
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.SocketChannel;
|
||||
|
||||
public class NewIOClient {
|
||||
public static void main(String[] args) {
|
||||
String fileName = "C++书单.md";
|
||||
try(SocketChannel socketChannel = SocketChannel.open();
|
||||
//得到一个文件channel
|
||||
FileChannel channel = new FileInputStream(fileName).getChannel()) {
|
||||
socketChannel.connect(new InetSocketAddress("localhost",7001));
|
||||
//准备发送
|
||||
long startTime = System.currentTimeMillis();
|
||||
//linux下一个transferTo 方法可以完成发送
|
||||
//在windows下一次调用transferTo只能发送8M,就需要分段传输文件,而且要主要
|
||||
// 传输时的位置
|
||||
//transferTo 底层使用到零拷贝
|
||||
long transferCount = channel.transferTo(0,channel.size(),socketChannel);
|
||||
System.out.println("发送的总得到字节数 "+ transferCount+" ,耗时: "+(System.currentTimeMillis() - startTime));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cn.zyjblogs.netty.nio.zerocopy;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.ServerSocketChannel;
|
||||
import java.nio.channels.SocketChannel;
|
||||
|
||||
public class NewIOServer {
|
||||
public static void main(String[] args) {
|
||||
InetSocketAddress inetSocketAddress = new InetSocketAddress(7001);
|
||||
try (ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()){
|
||||
serverSocketChannel.bind(inetSocketAddress);
|
||||
//创建buffer
|
||||
ByteBuffer byteBuffer = ByteBuffer.allocate(4096);
|
||||
while (true){
|
||||
SocketChannel socketChannel = serverSocketChannel.accept();
|
||||
int readCount = 0;
|
||||
while (-1 != readCount){
|
||||
readCount = socketChannel.read(byteBuffer);
|
||||
}
|
||||
//倒带position 设置为 0 mark作废
|
||||
byteBuffer.rewind();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cn.zyjblogs.netty.nio.zerocopy;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
||||
public class OldIOClient {
|
||||
public static void main(String[] args) {
|
||||
String fileName = "C++书单.md";
|
||||
try( Socket socket = new Socket("localhost",7001);
|
||||
FileInputStream fileInputStream = new FileInputStream(fileName);
|
||||
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream())) {
|
||||
byte[] buffer = new byte[4096];
|
||||
long readCount;
|
||||
long total = 0;
|
||||
long startTime = System.currentTimeMillis();
|
||||
while ((readCount = fileInputStream.read(buffer)) >= 0){
|
||||
total+=readCount;
|
||||
dataOutputStream.write(buffer);
|
||||
}
|
||||
System.out.println("发送总字节数: "+total +" ,耗时: "+(System.currentTimeMillis() - startTime));
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package cn.zyjblogs.netty.nio.zerocopy;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
public class OldIOServer {
|
||||
public static void main(String[] args) {
|
||||
try(ServerSocket serverSocket = new ServerSocket(7001)) {
|
||||
Socket socket = serverSocket.accept();
|
||||
|
||||
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
|
||||
byte[] byteArray = new byte[4096];
|
||||
while (true){
|
||||
int read = dataInputStream.read(byteArray, 0, byteArray.length);
|
||||
if (-1 == read){
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user