java实现对HDFS增删改查(CRUD)等操作
实现对HDFS增删改查CRUD等操作
1 查找
列出某个目录下的文件名称,hdfs命令如下所示:
hdfs dfs –ls/usr/app
java代码片段:
- public void list(String srcPath) {
- Configuration conf = new Configuration();
- LOG.info("[Defaultfs] :" +conf.get("fs.default.name"));
- conf.set("hadoop.job.ugi","app,app"); //It is not necessary for the default user.
- FileSystem fs;
- try {
- fs= FileSystem.get(conf);
- RemoteIterator<LocatedFileStatus>rmIterator = fs.listLocatedStatus(new Path(srcPath));
- while (rmIterator.hasNext()) {
- Path path = rmIterator.next().getPath();
- if(fs.isDirectory(path)){
- LOG.info("-----------DirectoryName: "+path.getName());
- }
- else if(fs.isFile(path)){
- LOG.info("-----------FileName: "+path.getName());
- }
- }
- }catch (IOException e) {
- LOG.error("list fileSysetm object stream.:" , e);
- new RuntimeException(e);
- }
- }
输出结果:
2014-03-11 22:38:15,329 INFO (com.hdfs.client.SyncDFS:48) ------------File Name: README.txt
2014-03-11 22:38:15,331 INFO (com.hdfs.client.SyncDFS:45) ------------Directory Name: blog_blogpost
2014-03-11 22:38:15,333 INFO (com.hdfs.client.SyncDFS:45) ------------Directory Name: test
读取文件中的内容,hdfs命令如下:
hdfs dfs –cat /input
java 代码:
- public void readFile(String file){
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- Pathpath = new Path(file);
- if(!fs.exists(path)){
- LOG.warn("file'"+ file+"' doesn't exist!");
- return ;
- }
- FSDataInputStreamin = fs.open(path);
- Stringfilename = file.substring(file.lastIndexOf('/') + 1, file.length());
- OutputStreamout = new BufferedOutputStream(new FileOutputStream(
- new File(filename)));
- byte[] b = new byte[1024];
- int numBytes = 0;
- while ((numBytes = in.read(b)) > 0) {
- out.write(b,0, numBytes);
- }
- in.close();
- out.close();
- fs.close();
- }catch (IOException e) {
- LOG.error("ifExists fs Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
获取文件的修改时间,java代码:
- /**
- * Gets the information about the file modifiedtime.
- * @param source
- * @throws IOException
- */
- public void getModificationTime(String source) throws IOException{
- Configurationconf = new Configuration();
- FileSystemfs = FileSystem.get(conf);
- PathsrcPath = new Path(source);
- // Check if the file alreadyexists
- if (!(fs.exists(srcPath))) {
- System.out.println("No such destination " + srcPath);
- return;
- }
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- FileStatusfileStatus = fs.getFileStatus(srcPath);
- long modificationTime =fileStatus.getModificationTime();
- LOG.info("modified datetime: " + System.out.format("File %s; Modification time : %0.2f%n",filename,modificationTime));
- }
获取文件块定位信息,java代码:
- /**
- * Gets the file block location info
- * @param source
- * @throws IOException
- */
- public void getBlockLocations(String source) throws IOException{
- Configurationconf = new Configuration();
- FileSystemfs = FileSystem.get(conf);
- PathsrcPath = new Path(source);
- // Check if the file alreadyexists
- if (!(ifExists(source))) {
- System.out.println("No such destination " + srcPath);
- return;
- }
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- FileStatusfileStatus = fs.getFileStatus(srcPath);
- BlockLocation[]blkLocations = fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
- int blkCount = blkLocations.length;
- System.out.println("File :" + filename + "stored at:");
- for (int i=0; i < blkCount; i++) {
- String[]hosts = blkLocations[i].getHosts();
- LOG.info("host ip:" +System.out.format("Host %d: %s %n", i, hosts));
- }
- }
获取Hadoop集群中data node的DNS主机名,java代码:
- public void getHostnames () throwsIOException{
- Configurationconfig = new Configuration();
- FileSystemfs = FileSystem.get(config);
- DistributedFileSystemhdfs = (DistributedFileSystem) fs;
- DatanodeInfo[]dataNodeStats = hdfs.getDataNodeStats();
- String[]names = new String[dataNodeStats.length];
- for (int i = 0; i < dataNodeStats.length; i++) {
- names[i]= dataNodeStats[i].getHostName();
- LOG.info("datenode hostname:"+(dataNodeStats[i].getHostName()));
- }
- }
2 创建
创建一个目录,指定具体的文件路径。hdfs命令如下:
- hdfs dfs –mkdir/usr/app/tmp
java代码:
- public void mkdir(String dir){
- Configurationconf = new Configuration();
- FileSystemfs = null;
- try {
- fs= FileSystem.get(conf);
- Pathpath = new Path(dir);
- if(!fs.exists(path)){
- fs.mkdirs(path);
- LOG.debug("create directory '"+dir+"' successfully!");
- }else{
- LOG.debug("directory '"+dir+"' exits!");
- }
- }catch (IOException e) {
- LOG.error("FileSystem get configuration with anerror");
- e.printStackTrace();
- }finally{
- if(fs!= null){
- try {
- fs.close();
- }catch (IOException e) {
- LOG.error("close fs object stream. :" , e);
- new RuntimeException(e);
- }
- }
- }
- }
将本地文件上传到hdfs上去,java代码如下:
- public void copyFromLocal (String source, String dest) {
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- PathsrcPath = new Path(source);
- PathdstPath = new Path(dest);
- // Check if the file alreadyexists
- if (!(fs.exists(dstPath))) {
- LOG.warn("dstPathpath doesn't exist" );
- LOG.error("No such destination " + dstPath);
- return;
- }
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- try{
- //if the file exists in thedestination path, it will throw exception.
- // fs.copyFromLocalFile(srcPath,dstPath);
- //remove and overwrite files withthe method
- //copyFromLocalFile(booleandelSrc, boolean overwrite, Path src, Path dst)
- fs.copyFromLocalFile(false, true, srcPath, dstPath);
- LOG.info("File " + filename + "copied to " + dest);
- }catch(Exception e){
- LOG.error("copyFromLocalFile exception caught!:" , e);
- new RuntimeException(e);
- }finally{
- fs.close();
- }
- }catch (IOException e1) {
- LOG.error("copyFromLocal IOException objectstream. :" ,e1);
- new RuntimeException(e1);
- }
- }
添加一个文件到指定的目录下,java代码如下:
- public void addFile(String source, String dest) {
- // Conf object will readthe HDFS configuration parameters
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- // Create the destination pathincluding the filename.
- if (dest.charAt(dest.length() - 1) != '/') {
- dest= dest + "/" + filename;
- }else {
- dest= dest + filename;
- }
- // Check if the file alreadyexists
- Pathpath = new Path(dest);
- if (fs.exists(path)) {
- LOG.error("File " + dest + " already exists");
- return;
- }
- // Create a new file and writedata to it.
- FSDataOutputStreamout = fs.create(path);
- InputStreamin = new BufferedInputStream(new FileInputStream(
- new File(source)));
- byte[] b = new byte[1024];
- int numBytes = 0;
- //In this way read and write datato destination file.
- while ((numBytes = in.read(b)) > 0) {
- out.write(b,0, numBytes);
- }
- in.close();
- out.close();
- fs.close();
- }catch (IOException e) {
- LOG.error("addFile Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
3 修改
重新命名hdfs中的文件名称,java代码如下:
- public void renameFile (String fromthis, String tothis){
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- PathfromPath = new Path(fromthis);
- PathtoPath = new Path(tothis);
- if (!(fs.exists(fromPath))) {
- LOG.info("No such destination " + fromPath);
- return;
- }
- if (fs.exists(toPath)) {
- LOG.info("Already exists! " + toPath);
- return;
- }
- try{
- boolean isRenamed = fs.rename(fromPath,toPath); //renames file name indeed.
- if(isRenamed){
- LOG.info("Renamed from " + fromthis + " to " + tothis);
- }
- }catch(Exception e){
- LOG.error("renameFile Exception caught! :" , e);
- new RuntimeException(e);
- }finally{
- fs.close();
- }
- }catch (IOException e1) {
- LOG.error("fs Exception caught! :" , e1);
- new RuntimeException(e1);
- }
- }
4 删除
在hdfs上,删除指定的一个文件。Java代码:
- public void deleteFile(String file) {
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- Pathpath = new Path(file);
- if (!fs.exists(path)) {
- LOG.info("File " + file + " does not exists");
- return;
- }
- /*
- * recursively delete the file(s) if it is adirectory.
- * If you want to mark the path that will bedeleted as
- * a result of closing the FileSystem.
- * deleteOnExit(Path f)
- */
- fs.delete(new Path(file), true);
- fs.close();
- }catch (IOException e) {
- LOG.error("deleteFile Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
Appendix 完整代码
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.BlockLocation;
- import org.apache.hadoop.fs.FSDataInputStream;
- import org.apache.hadoop.fs.FSDataOutputStream;
- import org.apache.hadoop.fs.FileStatus;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.LocatedFileStatus;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.fs.RemoteIterator;
- importorg.apache.hadoop.hdfs.DistributedFileSystem;
- import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
- public class SyncDFS {
- private static final Log LOG = LogFactory.getLog(SyncDFS.class);
- /**
- * Reads the directory name(s) and file name(s)from the specified parameter "srcPath"
- * @param srcPath
- */
- public void list(String srcPath) {
- Configuration conf = new Configuration();
- LOG.info("[Defaultfs] :" +conf.get("fs.default.name"));
- // conf.set("hadoop.job.ugi","app,app"); //It is not necessary for the default user.
- FileSystem fs;
- try {
- fs= FileSystem.get(conf);
- RemoteIterator<LocatedFileStatus>rmIterator = fs.listLocatedStatus(new Path(srcPath));
- while (rmIterator.hasNext()) {
- Path path = rmIterator.next().getPath();
- if(fs.isDirectory(path)){
- LOG.info("-----------DirectoryName: "+path.getName());
- }
- else if(fs.isFile(path)){
- LOG.info("-----------FileName: "+path.getName());
- }
- }
- }catch (IOException e) {
- LOG.error("list fileSysetm object stream.:" , e);
- new RuntimeException(e);
- }
- }
- /**
- * Makes the specified directory if it doesn'texist.
- * @param dir
- */
- public void mkdir(String dir){
- Configurationconf = new Configuration();
- FileSystemfs = null;
- try {
- fs= FileSystem.get(conf);
- Pathpath = new Path(dir);
- if(!fs.exists(path)){
- fs.mkdirs(path);
- LOG.debug("create directory '"+dir+"' successfully!");
- }else{
- LOG.debug("directory '"+dir+"' exits!");
- }
- }catch (IOException e) {
- LOG.error("FileSystem get configuration with anerror");
- e.printStackTrace();
- }finally{
- if(fs!= null){
- try {
- fs.close();
- }catch (IOException e) {
- LOG.error("close fs object stream. :" , e);
- new RuntimeException(e);
- }
- }
- }
- }
- /**
- * Reads the file content in console.
- * @param file
- */
- public void readFile(String file){
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- Pathpath = new Path(file);
- if(!fs.exists(path)){
- LOG.warn("file'"+ file+"' doesn't exist!");
- return ;
- }
- FSDataInputStreamin = fs.open(path);
- Stringfilename = file.substring(file.lastIndexOf('/') + 1, file.length());
- OutputStreamout = new BufferedOutputStream(new FileOutputStream(
- new File(filename)));
- byte[] b = new byte[1024];
- int numBytes = 0;
- while ((numBytes = in.read(b)) > 0) {
- out.write(b,0, numBytes);
- }
- in.close();
- out.close();
- fs.close();
- }catch (IOException e) {
- LOG.error("ifExists fs Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
- public boolean ifExists(String source){
- if(source == null || source.length() ==0){
- return false;
- }
- Configurationconf = new Configuration();
- FileSystemfs = null;
- try {
- fs= FileSystem.get(conf);
- LOG.debug("judge file '"+source + "'");
- return fs.exists(new Path(source));
- }catch (IOException e) {
- LOG.error("ifExists fs Exception caught! :" , e);
- new RuntimeException(e);
- return false;
- }finally{
- if(fs != null){
- try {
- fs.close();
- }catch (IOException e) {
- LOG.error("fs.close Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
- }
- }
- /**
- * Recursively copies the source pathdirectories or files to the destination path of DFS.
- * It is the same functionality as thefollowing comand:
- * hadoopfs -copyFromLocal <local fs><hadoop fs>
- * @param source
- * @param dest
- */
- public void copyFromLocal (String source, String dest) {
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- PathsrcPath = new Path(source);
- PathdstPath = new Path(dest);
- // Check if the file alreadyexists
- if (!(fs.exists(dstPath))) {
- LOG.warn("dstPathpath doesn't exist" );
- LOG.error("No such destination " + dstPath);
- return;
- }
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- try{
- //if the file exists in thedestination path, it will throw exception.
- // fs.copyFromLocalFile(srcPath,dstPath);
- //remove and overwrite files withthe method
- //copyFromLocalFile(booleandelSrc, boolean overwrite, Path src, Path dst)
- fs.copyFromLocalFile(false, true, srcPath, dstPath);
- LOG.info("File " + filename + "copied to " + dest);
- }catch(Exception e){
- LOG.error("copyFromLocalFile exception caught!:" , e);
- new RuntimeException(e);
- }finally{
- fs.close();
- }
- }catch (IOException e1) {
- LOG.error("copyFromLocal IOException objectstream. :" ,e1);
- new RuntimeException(e1);
- }
- }
- public void renameFile (String fromthis, String tothis){
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- PathfromPath = new Path(fromthis);
- PathtoPath = new Path(tothis);
- if (!(fs.exists(fromPath))) {
- LOG.info("No such destination " + fromPath);
- return;
- }
- if (fs.exists(toPath)) {
- LOG.info("Already exists! " + toPath);
- return;
- }
- try{
- boolean isRenamed = fs.rename(fromPath,toPath); //renames file name indeed.
- if(isRenamed){
- LOG.info("Renamed from " + fromthis + " to " + tothis);
- }
- }catch(Exception e){
- LOG.error("renameFile Exception caught! :" , e);
- new RuntimeException(e);
- }finally{
- fs.close();
- }
- }catch (IOException e1) {
- LOG.error("fs Exception caught! :" , e1);
- new RuntimeException(e1);
- }
- }
- /**
- * Uploads or adds a file to HDFS
- * @param source
- * @param dest
- */
- public void addFile(String source, String dest) {
- // Conf object will readthe HDFS configuration parameters
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- // Create the destination pathincluding the filename.
- if (dest.charAt(dest.length() - 1) != '/') {
- dest= dest + "/" + filename;
- }else {
- dest= dest + filename;
- }
- // Check if the file alreadyexists
- Pathpath = new Path(dest);
- if (fs.exists(path)) {
- LOG.error("File " + dest + " already exists");
- return;
- }
- // Create a new file and writedata to it.
- FSDataOutputStreamout = fs.create(path);
- InputStreamin = new BufferedInputStream(new FileInputStream(
- new File(source)));
- byte[] b = new byte[1024];
- int numBytes = 0;
- //In this way read and write datato destination file.
- while ((numBytes = in.read(b)) > 0) {
- out.write(b,0, numBytes);
- }
- in.close();
- out.close();
- fs.close();
- }catch (IOException e) {
- LOG.error("addFile Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
- /**
- *Deletes the files if it is a directory.
- * @param file
- */
- public void deleteFile(String file) {
- Configurationconf = new Configuration();
- FileSystemfs;
- try {
- fs= FileSystem.get(conf);
- Pathpath = new Path(file);
- if (!fs.exists(path)) {
- LOG.info("File " + file + " does not exists");
- return;
- }
- /*
- * recursively delete the file(s) if it is adirectory.
- * If you want to mark the path that will bedeleted as
- * a result of closing the FileSystem.
- * deleteOnExit(Path f)
- */
- fs.delete(new Path(file), true);
- fs.close();
- }catch (IOException e) {
- LOG.error("deleteFile Exception caught! :" , e);
- new RuntimeException(e);
- }
- }
- /**
- * Gets the information about the file modifiedtime.
- * @param source
- * @throws IOException
- */
- public void getModificationTime(String source) throws IOException{
- Configurationconf = new Configuration();
- FileSystemfs = FileSystem.get(conf);
- PathsrcPath = new Path(source);
- // Check if the file alreadyexists
- if (!(fs.exists(srcPath))) {
- System.out.println("No such destination " + srcPath);
- return;
- }
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- FileStatusfileStatus = fs.getFileStatus(srcPath);
- long modificationTime =fileStatus.getModificationTime();
- LOG.info("modified datetime: " + System.out.format("File %s; Modification time : %0.2f%n",filename,modificationTime));
- }
- /**
- * Gets the file block location info
- * @param source
- * @throws IOException
- */
- public void getBlockLocations(String source) throws IOException{
- Configurationconf = new Configuration();
- FileSystemfs = FileSystem.get(conf);
- PathsrcPath = new Path(source);
- // Check if the file alreadyexists
- if (!(ifExists(source))) {
- System.out.println("No such destination " + srcPath);
- return;
- }
- // Get the filename out of thefile path
- Stringfilename = source.substring(source.lastIndexOf('/') + 1, source.length());
- FileStatusfileStatus = fs.getFileStatus(srcPath);
- BlockLocation[]blkLocations = fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
- int blkCount = blkLocations.length;
- System.out.println("File :" + filename + "stored at:");
- for (int i=0; i < blkCount; i++) {
- String[]hosts = blkLocations[i].getHosts();
- LOG.info("host ip:" +System.out.format("Host %d: %s %n", i, hosts));
- }
- }
- public void getHostnames () throws IOException{
- Configurationconfig = new Configuration();
- FileSystemfs = FileSystem.get(config);
- DistributedFileSystemhdfs = (DistributedFileSystem) fs;
- DatanodeInfo[]dataNodeStats = hdfs.getDataNodeStats();
- String[]names = new String[dataNodeStats.length];
- for (int i = 0; i < dataNodeStats.length; i++) {
- names[i]= dataNodeStats[i].getHostName();
- LOG.info("datenode hostname:"+(dataNodeStats[i].getHostName()));
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- SyncDFSdfs = new SyncDFS();
- dfs.list("/user/app");
- dfs.mkdir("/user/app");
- // dfs.readFile("/user/app/README.txt");
- LOG.info("--------------" +
- dfs.ifExists("/user/warehouse/hbase.db/u_data/u.data")); //false
- LOG.info("--------------" + dfs.ifExists("/user/app/README.txt")); //true
- //copied the local file(s) to thedfs.
- // dfs.copyFromLocal("/opt/test","/user/app");
- //delete the file(s) from the dfs
- // dfs.deleteFile("/user/app/test");
- //rename diretory in dfs
- // dfs.renameFile("/user/app/test","/user/app/log");
- //rename file in dfs
- // dfs.renameFile("/user/app/log/derby.log","/user/app/log/derby_info.log");
- }
- }
java实现对HDFS增删改查(CRUD)等操作相关推荐
- 实现对HDFS增删改查CRUD等操作
1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: public void list(String srcPath) {Confi ...
- 实现对mysql增删改查_Java语言实现对MySql数据库中数据的增删改查操作的代码
简单说操作的步骤: 1.连接数据库 2.将SQL语句发送到数据库 3.执行SQL语句 这里举个例子: 在一个数据库中有个students表,表中有学号(Id),姓名(Name),性别(Sex),地址( ...
- JAVA+SWING超市销售管理系统开发(JAVA实训作业增删改查)
一个非常简单的超市销售系统,只涉及增删改查. 1. 登录 两种方式登录系统,这里主要分享管理员登录 最简单的方法,指定账号密码 JButton button_login = new JButton(& ...
- Android前端通过Http协议与J2EE后端数据交互。工具eclipse、MySQL、Tomcat。通过JoSn获取数据。Android端实现对MySQL增删改查功能。
Android:目录 HttpThread.java package com.example.saads; import java.io.BufferedReader; import java.io. ...
- php xml 增删改查,PHP实现对xml进行简单的增删改查(CRUD)操作示例
本文实例讲述了PHP实现对xml进行简单的增删改查(CRUD)操作.分享给大家供大家参考,具体如下: 假如有下面xml文件: 55.8 56 40 339 如何使用php对它进行CRUD?其实像这种简 ...
- 一步步实现:JPA的基本增删改查CRUD(jpa基于hibernate)
1.创建一个JPA工程 首先,创建一个JPA工程(若不知道JPA创建或出现at least one user library must be selected等错误,请参考http://blog.cs ...
- JDBC:JAVA连接Mysql实现增删改查
总有特别赶的时候,小高叫你如何速通JAVA连接数据库Mysql实现增删改查.CV战士 一.前置准备工作 1. 安装IDEA,配置JAVA环境 2. 安装Mysql,配置Mysql环境变量 3. 安装S ...
- MyBatisPlus03_MyBatisPlus的增删改查CRUD
MyBatisPlus03_MyBatisPlus的增删改查CRUD 查询 无条件查询 List<User> list = mapper.selectList(null); eq查询 Qu ...
- Java连接Mysql数据库增删改查实现
Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...
最新文章
- Cascade RPN,结构的艺术带来极致提升 | NeurIPS 2019
- Jquery基本知识点的总结
- LTE voice centric和data centric
- tensorrt动态输入分辨率尺寸
- 非常值得收藏的 IBM SPSS Modeler 算法简介
- 软件工程--需求分析
- RSA加密的填充模式
- SQLi-LABS(11~20关详解)
- php import用法,JavaScript中import怎么使用?
- 分布式系统CAP定理
- codeforces C. Diverse Permutation(构造)
- v210 启动脚本分析
- java map集合排序的_Java对Map集合进行排序
- Silverlight实用窍门系列:28.Silverlight制作随机分布雷达扫描点,模拟雷达扫描图之被扫描设备【附带源码实例】...
- Python面试笔记二
- kmeans算法实例及python代码-Python实现k-means算法
- python对数组分类_有效地从字典Python中对数组进行分类
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)题解
- 经典的观点挖掘算法(文本挖掘系列)
- android 360游戏sdk,360dev 单机游戏接入SDK
热门文章
- 【错误记录】Ubuntu 中 ROOT 用户无法启动 Visual Studio Code 开发环境 ( 推荐在普通用户下使用 VSCode 开发环境 )
- 【EventBus】发布-订阅模式 ( Android 中使用 发布-订阅模式 进行通信 )
- 【MATLAB】三维图形绘制 ( 绘制网格 + 等高线 | meshc 函数 | 绘制平面 + 等高线 | surfc 函数 )
- 【Netty】NIO 通道 ( Channel ) 组件
- 【Android 高性能音频】AAudio 音频流 数据回调细节 ( 数据回调函数优先级 | 数据回调函数 | 采样率 | 采样数 | 缓冲区调整 | 线程不安全 )
- NHibernate 状态的概念 以及 小测试
- 实践作业3 (2017-12-4)
- win7 无法复制粘贴
- Apache地址重写的几个问题
- 一些有关计组实验中Quartus中的名词或术语的解释