C# XML文件基础

文章目录

  • 一、XML介绍
    • 1.1 概念
    • 1.2 例子
    • 1.3创建一个xml文件
  • 二、读取XML文件
    • 2.1加载XML文件
    • 2.2 获取根节点、读取信息、对象映射、填充结构,绑定用户界面
    • 2.3 遍历节点、
    • 2.4例子源代码

一、XML介绍

1.1 概念

在C#中,XML文件是一种用来存储和传输数据的标记语言文档。XML代表可扩展标记语言(eXtensible Markup Language)。它设计用来传输和存储数据,具有自我描述性,并且对人和机器都是可读的。

XML文件的作用包括:

  1. 数据存储: XML是一种流行的方式,用于存储应用程序设置、配置信息或其他数据。例如,微软的.NET框架中的配置文件(如 app.configweb.config)就是XML格式的。

  2. 数据交换: 由于其文本本质和广泛的可读性,XML是一个常用的数据交换格式,可以在不同的系统和程序间传递信息,尤其是在Web服务和SOA(面向服务的架构)中。

  3. 数据结构描述: XML可以描述数据的结构,通过元素和属性来表示数据的层次和语义。这对于确保数据的一致性和完整性很有帮助。

  4. 平台无关性: 作为一个文本格式,XML文件可以在不同的操作系统和环境间轻松地移植和使用。

  5. 可扩展性: 如其名称所示,XML是可扩展的,这意味着你可以设计自己的标记元素和文档结构,以满足特定的需要,而不必依赖于标准的数据格式。

  6. 支持国际化: XML支持Unicode,使得它可以表示几乎所有人类语言中的文本,这对于国际化的应用程序来说非常重要。

  7. 验证: 使用XML Schema定义语言(XSD),可以定义XML文档的结构和数据类型,并对XML文档进行验证,确保数据的正确性。

  8. 转换和呈现: 使用XSLT(Extensible Stylesheet Language Transformations),可以把XML文档转换为其他格式的文档,例如HTML,用于在浏览器中显示。

在C#中操作XML文件,你可以使用System.Xml命名空间中的类,如XmlDocument, XmlReader, XmlWriter, XmlSerializer等,来读取、修改、创建和序列化XML文档。

1.2 例子

在C#或其他编程语言中,有专门的库和工具可以帮助开发者生成或解析XML格式的数据,而不需要手动编写或解析XML的标签和结构。这些工具通常为数据提供了一个高层抽象,允许开发者用编程语言中的数据结构来操作数据,然后这些工具负责将这些数据结构转换成合适的XML格式,或者将XML数据解析成可在程序中使用的数据结构。所以不用去细致了解它的语法;

以下是一个简单的XML文件内容的例子,它描述了一个图书馆中书籍的集合:


<library>
  <book id="1">
    <title>The Great Gatsbytitle>
    <author>F. Scott Fitzgeraldauthor>
    <year>1925year>
    <genre>Fictiongenre>
  book>
  <book id="2">
    <title>Nineteen Eighty-Fourtitle>
    <author>George Orwellauthor>
    <year>1949year>
    <genre>Dystopiangenre>
  book>
  <book id="3">
    <title>To Kill a Mockingbirdtitle>
    <author>Harper Leeauthor>
    <year>1960year>
    <genre>Fictiongenre>
  book>
library>

这个XML文档遵循以下结构和特点:

  • XML声明: 是XML声明,它定义了这个文档的XML版本和字符编码。

  • 根元素: 标签是文档的根元素,所有其他元素都包含在其中。

  • 元素(或标签):</code>、<code><author></code>、<code><year></code> 和 <code><genre></code>。每个 <code><book></code> 元素表示图书馆中的一本书。</p> </li> <li> <p><strong>属性:</strong> <code><book></code> 元素中的 <code>id</code> 是一个属性,它为每本书提供了一个唯一的标识符。</p> </li> <li> <p><strong>文本内容:</strong> 标签如 <code><title></code> 和 <code><author></code> 的文本内容存储了书的标题和作者。</p> </li> </ul> <p>XML文件可以被各种程序和服务用来读取、显示和处理图书馆集合中书籍的信息。因为XML是可扩展的,所以如果需要,我们可以很容易地添加更多的数据字段,比如出版社、ISBN号,或者其他元数据。</p> <h3>1.3创建一个xml文件</h3> <p>假设我们有一个C#对象,并希望将其转换为XML,我们可以使用 XmlSerializer 来序列化这个对象:</p> <pre><code>using System; using System.IO; using System.Xml.Serialization; // 假设有一个Book类 public class Book { public string Title { get; set; } public string Author { get; set; } public int Year { get; set; } public string Genre { get; set; } } class Program { static void Main() { // 创建一个Book实例 Book myBook = new Book { Title = "The Great Gatsby", Author = "F. Scott Fitzgerald", Year = 1925, Genre = "Fiction" }; // 创建一个XmlSerializer对象来进行序列化 XmlSerializer serializer = new XmlSerializer(typeof(Book)); // 使用StreamWriter写入文件 using (StreamWriter writer = new StreamWriter("D:\\IDE\\book.xml")) { serializer.Serialize(writer, myBook); } Console.WriteLine("XML文件已生成。"); } } </code></pre> <p><a href="http://img.e-com-net.com/image/info8/a9e4c2724b82421f9bce08651e9e88a1.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a9e4c2724b82421f9bce08651e9e88a1.jpg" alt="C# XML文件基础_第1张图片" width="650" height="165" style="border:1px solid black;"></a></p> <p>于是在我们的目标地址生成了这样的一个文件,而且无法被打开。需要注意的是:在上面的例子,.NET中对XML的处理主要是对象到XML的转换,所以使用XmlSerializer更合适。<br> 如果涉及到需要读取或修改XML文档,或者创建新的XML文档结构,那么XmlDocument可能更适合。此外,XmlDocument在.NET Core中被一个更快和更现代的XDocument类(位于System.Xml.Linq命名空间下)所替代,它提供了LINQ集成和更简洁的API。</p> <h2>二、读取XML文件</h2> <p>假如我们得到了一个这样的XML文件,我们需要使用C#文件读取,文件是这样,里面记载了几个班级学生的信息(姓名 年龄 行别 班级):</p> <pre><code><?xml version="1.0" encoding="utf-8" ?> <Students> <Student> <StuName>王五</StuName> <StuAge>19</StuAge> <Gender>男</Gender> <ClassName>机械1班</ClassName> </Student> <Student> <StuName>王六</StuName> <StuAge>22</StuAge> <Gender>男</Gender> <ClassName>机械2班</ClassName> </Student> <Student> <StuName>刘九</StuName> <StuAge>21</StuAge> <Gender>男</Gender> <ClassName>机械3班</ClassName> </Student> <Student> <StuName>阿红</StuName> <StuAge>23</StuAge> <Gender>女</Gender> <ClassName>机械4班</ClassName> </Student> <Student> <StuName>阿七</StuName> <StuAge>20</StuAge> <Gender>女</Gender> <ClassName>机械5班</ClassName> </Student> <DataInfo> <Version vNo="1.2" pTime="2012-12-12">数据版本信息</Version> </DataInfo> </Students> </code></pre> <p>我们希望可以这样显示出来:<br> <a href="http://img.e-com-net.com/image/info8/a5f3814f017943b6ad64999f954a8c28.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/a5f3814f017943b6ad64999f954a8c28.png" alt="C# XML文件基础_第2张图片" width="377" height="223" style="border:1px solid black;"></a><br> 应该怎么办呢,我们可以按照这样的步骤来进行:</p> <ol> <li> <p><strong>加载XML文件:</strong></p> <ul> <li>使用<code>XmlDocument</code>类或者<code>XDocument</code>类(如果是使用LINQ to XML)来加载XML文件。这通常通过调用这些类的<code>Load</code>方法来实现,传入文件的路径或者一个<code>Stream</code>对象。</li> </ul> </li> <li> <p><strong>获取根节点:</strong></p> <ul> <li>通过<code>DocumentElement</code>属性(对于<code>XmlDocument</code>)或者<code>Root</code>属性(对于<code>XDocument</code>)来获取XML文档的根节点。</li> </ul> </li> <li> <p><strong>遍历节点:</strong></p> <ul> <li>使用循环结构遍历根节点的子节点。如果XML结构更为复杂,可能需要嵌套循环或递归方法来遍历子节点的子节点等。</li> </ul> </li> <li> <p><strong>读取节点信息:</strong></p> <ul> <li>根据节点的类型或名称获取所需的信息。这可能包括节点的文本内容(通常是<code>InnerText</code>或<code>Value</code>属性)以及节点的属性(可以通过<code>Attributes</code>集合或直接访问特定属性)。</li> </ul> </li> <li> <p><strong>对象映射:</strong></p> <ul> <li>将读取的XML数据映射到对象属性。创建对象实例,根据XML节点的内容来设置对象的属性。这个步骤通常需要你有一个与XML数据结构相对应的对象模型。</li> </ul> </li> <li> <p><strong>填充数据结构:</strong></p> <ul> <li>如果要处理多个相似的节点(例如,在XML中表示多个学生的多个<code>Student</code>节点),则可以创建对象的集合,如<code>List<T></code>。读取每个节点的信息,创建并填充对象实例,然后将对象添加到集合中。</li> </ul> </li> <li> <p><strong>绑定到用户界面(可选):</strong></p> <ul> <li>将对象集合绑定到用户界面控件,如在Windows窗体中的<code>DataGridView</code>。这允许自动地将集合中的数据显示在用户界面上。</li> </ul> </li> <li> <p><strong>异常处理(建议):</strong></p> <ul> <li>添加异常处理逻辑来捕获并处理可能发生的任何错误,例如文件找不到、文件损坏或XML结构不匹配等异常情况。</li> </ul> </li> </ol> <p>接下来我们就按照这个步骤完后读取xml文件的任务。</p> <h3>2.1加载XML文件</h3> <pre><code>XmlDocument xml_Doc = new XmlDocument(); //【1】创建XML文档操作对象 xml_Doc.Load("StuScore.xml"); //【2】加载XML文件到文档对象中(路径) </code></pre> <p>我们先实例化一个XmlDocument对象,名为xml_Doc。XmlDocument是.NET框架中的一个类,它提供了一个表示XML文档的对象模型。这个类可以用来加载、编辑和保存XML文档。此时,xml_Doc是一个空的XML文档对象,还没有加载任何数据。</p> <p>接下来我们使用了xml_Doc对象(其实还是XmlDocument的方法)的Load方法,以加载一个名为"StuText.xml"的XML文件。这里的字符串"StuText.xml"指定了XML文件的名称和路径。如果没有指定路径,程序将在应用程序的当前工作目录中查找该文件。(这里就是文件在程序目录中,所以没有具体路径)。<br> 当调用Load方法时,会有下面几种情况:</p> <p>XmlDocument对象xml_Doc会尝试找到并打开指定的XML文件。<br> 如果成功找到并能够访问该文件,XmlDocument将读取文件的内容,并基于这些内容构建内部的DOM(文档对象模型)树。这个DOM树是一个节点的层次结构,它表示XML文档的结构,可以通过程序进行查询和修改。<br> 如果在加载过程中发现任何语法错误(比如不匹配的标签、不正确的属性格式等),将抛出一个XmlException异常,所以需要在调用Load方法的代码周围添加相应的异常处理逻辑(try-catch块)来捕获并处理这些异常。<br> 加载完毕后,可以通过xml_Doc对象访问和操作XML文档的内容。例如,可以读取特定的节点、属性或进行其他的查询和修改操作。这些操作可以用来提取数据,或者在内存中对XML文档进行更改,并最终将更改写回到文件或其他输出流中。</p> <h3>2.2 获取根节点、读取信息、对象映射、填充结构,绑定用户界面</h3> <pre><code> XmlNode rootNode = xml_Doc.DocumentElement; //【3】获取XML文档根目录 </code></pre> <p>这行代码是在加载XML文档后,从<code>XmlDocument</code>对象中获取文档的根元素(root element)。根元素是XML文档结构的最顶层元素,也就是所有其他元素的父元素。</p> <p>在这里:</p> <ul> <li><code>xml_Doc</code>是前面代码中创建并加载了XML文件内容的<code>XmlDocument</code>对象。</li> <li><code>DocumentElement</code>是<code>XmlDocument</code>类的一个属性,它返回一个<code>XmlElement</code>对象,该对象代表文档的根元素。<br> 因为xml其实是一个树结构<br> <a href="http://img.e-com-net.com/image/info8/9cfd8cb285ad417b98b0e0cf59da4801.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/9cfd8cb285ad417b98b0e0cf59da4801.jpg" alt="C# XML文件基础_第3张图片" width="650" height="315" style="border:1px solid black;"></a></li> </ul> <p><code>rootNode</code>变量现在包含了对XML文档根元素的引用。持有这个引用之后,就可以遍历整个XML文档的元素,因为所有的节点都是从这个根元素开始嵌套的。我们可以使用这个引用来访问、修改或查询XML文档的各个部分。例如,我们可以访问根节点的子节点、属性等等。</p> <h3>2.3 遍历节点、</h3> <pre><code> List<Student> list = new List<Student>();//创建对象集合 foreach (XmlNode stuNode in rootNode.ChildNodes) //【4】遍历根节点(根节点包含所有节点) { if (stuNode.Name == "Student") { Student xml_Stu = new Student(); foreach (XmlNode subNode in stuNode) //【5】遍历子节点 { switch (subNode.Name)//根据子节点的名称封装到对象的属性 { case "StuName": xml_Stu.StuName = subNode.InnerText;//获取《节点名称》对应的《节点值》 break; case "StuAge": xml_Stu.StuAge = Convert.ToInt16(subNode.InnerText); break; case "Gender": xml_Stu.Gender = subNode.InnerText; break; case "ClassName": xml_Stu.ClassName = subNode.InnerText; break; } } list.Add(xml_Stu); } } this.dgvStuList.DataSource = list; </code></pre> <p>这段代码是在C#中使用的,它展示了如何从XML文档中读取数据并将这些数据封装到一个对象列表中。接着,将这个列表设置为数据网格视图控件(也就是我们的显示窗口)的数据源,以便在用户界面上展示数据。<br> 首先我们创建了一个名为list的新列表,这个列表用来存储Student类型的对象。Student是我们自定义的类,它有StuName(姓名)、StuAge(年龄)、Gender(性别)和ClassName(班级)等属性。<br> foreach (XmlNode stuNode in rootNode.ChildNodes)<br> 该循环遍历前面提到的根节点的直接子节点。这里,stuNode代表当前遍历到的子节点。循环的每次迭代都会处理一个子节点。<br> //<br> //<br> 这里插播一条直接子节点:<br> "直接子节点"是一个术语,用来描述在一个文档对象模型(DOM)树中,某个节点下一级的节点。在XML或HTML文档中,一个节点(例如一个元素)可以有子节点,这些子节点可以是元素节点、文本节点、注释节点等等。</p> <p>以XML为例,考虑以下简单的结构:</p> <pre><code class="prism language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Parent</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Child</span><span class="token punctuation">></span></span>First child<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>Child</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Child</span><span class="token punctuation">></span></span>Second child<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>Child</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>Parent</span><span class="token punctuation">></span></span> </code></pre> <p>在这个例子中,<code><Parent></code>元素有两个直接子节点,都是<code><Child></code>元素。这些<code><Child></code>元素是<code><Parent></code>元素的直接子节点,因为它们是<code><Parent></code>下第一层的节点。如果这些<code><Child></code>元素内部还有其他元素,则这些内部元素将被视为<code><Child></code>元素的直接子节点,而不是<code><Parent></code>的直接子节点。</p> <p>在处理DOM时,能够区分"直接子节点"(也就是某个特定节点的第一级子节点)与所有后代节点(即所有层级的子节点)是很重要的,因为它们之间的关系会影响你如何设计代码来遍历和操作DOM。<br> ///<br> ///</p> <pre><code>if (stuNode.Name == "Student") </code></pre> <p>在遍历子节点时,代码检查节点的名称是否为"Student"。如果是,这意味着这个节点包含了一个学生对象的数据。</p> <pre><code>Student xml_Stu = new Student(); </code></pre> <p>一旦找到一个名为"Student"的节点,代码就会创建一个新的Student对象实例,名为xml_Stu。</p> <pre><code>foreach (XmlNode subNode in stuNode) //【5】遍历Student节点的子节点 </code></pre> <p>接着,代码遍历"Student"节点的所有子节点,这些子节点包含了关于学生的具体信息,如姓名、年龄等。</p> <pre><code>switch (subNode.Name) { // ... } </code></pre> <p>在此switch语句中,代码根据子节点的名称来判断应该将节点内的文本(InnerText)赋值给xml_Stu对象的哪个属性。例如,如果子节点的名称是"StuName",则将它的文本内容赋值给xml_Stu对象的StuName属性。</p> <pre><code>list.Add(xml_Stu); </code></pre> <p>一旦填充完xml_Stu对象的所有属性,这个对象就会被添加到list列表中。</p> <pre><code>this.dgvStuList.DataSource = list; </code></pre> <p>最后,list列表被设置为名为dgvStuList的数据网格视图控件的数据源。dgvStuList是一个Windows窗体应用程序中的控件,用于显示数据。这样设置后,dgvStuList将显示list列表中的所有学生信息。</p> <p>总之呢,这段代码的作用是将XML文档中特定结构的数据(在这个例子中是学生信息)读取出来,创建对应的C#对象列表,并将这些数据展示在用户界面上。</p> <h3>2.4例子源代码</h3> <p>链接:https://pan.baidu.com/s/1fSmI2USsrVWHxh5zXtQWYg?pwd=1234<br> 提取码:1234</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1747410044451831808"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(c#,xml)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1947592455603941376.htm" title="C#编程,.Net 依赖注入IOC框架入门之一 CastleWindso" target="_blank">C#编程,.Net 依赖注入IOC框架入门之一 CastleWindso</a> <span class="text-muted">子不语</span> <a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5/1.htm">依赖注入</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5/1.htm">依赖注入</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a> <div>一、简介Castle是.net平台上的一个开源项目,为企业级开发和WEB应用程序开发提供完整的服务,用于提供IOC的解决方案.IOC被称为控制反转或者依赖注入(DependencyInjection)。Windsor是Castle的一个IOC容器。它构建于MicroKernel之上,功能非常之强大,能检测类并了解使用这些类时需要什么参数,检测类型和类型之间工作依赖性,并提供服务或者发生错误时提供预</div> </li> <li><a href="/article/1947575814597963776.htm" title="《注解驱动的秘密:@Configuration 到 @EnableXXX》" target="_blank">《注解驱动的秘密:@Configuration 到 @EnableXXX》</a> <span class="text-muted">没有bug.的程序员</span> <a class="tag" taget="_blank" href="/search/Spring%E5%85%A8%E5%AE%B6%E6%A1%B6%E5%AE%9E%E6%88%98%E7%B2%BE%E9%80%9A%E7%B3%BB%E5%88%97/1.htm">Spring全家桶实战精通系列</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/Spring%E6%B3%A8%E8%A7%A3%E5%8E%9F%E7%90%86/1.htm">Spring注解原理</a><a class="tag" taget="_blank" href="/search/SPI%E6%9C%BA%E5%88%B6/1.htm">SPI机制</a><a class="tag" taget="_blank" href="/search/Starter%E5%BC%80%E5%8F%91/1.htm">Starter开发</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/1.htm">源码解析</a> <div>注解驱动的秘密:从@Configuration到@EnableXXX引言:Spring注解驱动的演进之路从XML配置到注解驱动,Spring框架经历了革命性的转变。这种转变不仅简化了开发,更带来了模块化、可扩展性的巨大提升。本文将深入剖析@Configuration到@EnableXXX的底层机制,揭示注解驱动背后的精妙设计。XML配置ConfigurationImportEnableXXXSpr</div> </li> <li><a href="/article/1947563335025225728.htm" title="从 C# 到 Python:项目实战第五天的飞跃" target="_blank">从 C# 到 Python:项目实战第五天的飞跃</a> <span class="text-muted">AI、少年郎</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在前面三天的学习中,我们已经掌握了Python的基础语法、数据结构以及一些核心库的使用。今天,我们将通过三个实战项目,深入对比C#和Python在命令行工具开发、Web应用开发以及数据处理方面的差异,感受Python在实际项目中的强大魅力。一、命令行工具开发:文件批量处理命令行工具是开发者日常工作中经常用到的工具,无论是文件处理、数据转换还是系统管理,都离不开命令行工具的身影。下面我们就来对比一下</div> </li> <li><a href="/article/1947562200705069056.htm" title="Spring Boot 集成 RabbitMQ:普通队列、延迟队列与死信队列全解析" target="_blank">Spring Boot 集成 RabbitMQ:普通队列、延迟队列与死信队列全解析</a> <span class="text-muted">代码怪兽大作战</span> <a class="tag" taget="_blank" href="/search/RabbitMQ/1.htm">RabbitMQ</a><a class="tag" taget="_blank" href="/search/java-rabbitmq/1.htm">java-rabbitmq</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E6%AD%BB%E4%BF%A1%E9%98%9F%E5%88%97/1.htm">死信队列</a><a class="tag" taget="_blank" href="/search/%E5%BB%B6%E6%97%B6%E9%98%9F%E5%88%97/1.htm">延时队列</a><a class="tag" taget="_blank" href="/search/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/1.htm">消息队列</a> <div>SpringBoot集成RabbitMQ:普通队列、延迟队列与死信队列全解析1.背景介绍2.RabbitMQ及队列类型详解3.项目依赖配置(pom.xml)4.SpringBootRabbitMQ配置详解(application.yml)5.核心队列代码示例及详解6.消息生产者实现7.消费者设计及异常处理策略8.死信队列消费者与告警设计9.消息确认机制详解常见异常示例异常原因分析解决方案10.延迟</div> </li> <li><a href="/article/1947521605827620864.htm" title="Spring Boot 源码解析之 Logging" target="_blank">Spring Boot 源码解析之 Logging</a> <span class="text-muted">fire-flyer</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/logging/1.htm">logging</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div>目录设计总览(SpringBootLogging模块抽象)LoggingSystem加载机制源码分析LoggingApplicationListener启动流程Log4J2LoggingSystem主要源码解析logging.config、log4j2-spring.xml加载逻辑动态日志级别设置(Actuator调用)✅1️⃣设计总览logging初始化流程总览:[SpringBoot启动]|v</div> </li> <li><a href="/article/1947464856315686912.htm" title="防止应用调试分析IP被扫描加固实战教程" target="_blank">防止应用调试分析IP被扫描加固实战教程</a> <span class="text-muted">咕噜企业签名分发-大圣</span> <a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>防止应用调试分析IP被扫描加固实战教程主要包括以下几个方面的措施:一、应用层面的加固措施1.确保通信加密:使用HTTPS协议进行所有网络通信,加密传输的数据,防止中间人攻击(MITM)。在Android应用中,可以通过NetworkSecurityConfiguration强制使用HTTPS。创建network_security_config.xml文件,并在AndroidManifest.xml</div> </li> <li><a href="/article/1947455388693622784.htm" title="微信小程序使用TDesign组件中图片上传和图片删除" target="_blank">微信小程序使用TDesign组件中图片上传和图片删除</a> <span class="text-muted">研三前端狗</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/tdesign/1.htm">tdesign</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a> <div>本篇主要是总结,图片上传。使用TDesign组件。首先wxml文件js文件//上传图片handleSuccess(e){letthat=thisconst{fileList}=this.data;//console.log(e.detail.files[e.detail.files.length-1].url)const{files}=e.detail;this.setData({originFi</div> </li> <li><a href="/article/1947447073548857344.htm" title="Maven" target="_blank">Maven</a> <span class="text-muted">iam_leeqing</span> <a class="tag" taget="_blank" href="/search/JAVA%E5%BC%80%E5%8F%91/1.htm">JAVA开发</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Maven是一个面向Java项目的综合性项目管理和构建工具,它通过提供标准化的项目结构、依赖管理和构建生命周期来简化开发流程。Maven使用XML格式的pom.xml文件来定义项目配置和依赖关系,支持自动化构建过程,包括编译、测试、打包和部署等阶段。此外,Maven还能自动下载所需的库文件并解决依赖冲突,同时提供了丰富的插件支持以扩展其功能。通过使用Maven,开发者可以提高构建的一致性和可重复性</div> </li> <li><a href="/article/1947438879413956608.htm" title="有关Maven的个人笔记总结" target="_blank">有关Maven的个人笔记总结</a> <span class="text-muted"></span> <div>Mavenpom.xml文件详解一级标签bulid(定义了项目的构建配置,包括编译、测试、打包等过程。可以指定插件和构建生命周期。)dependces(列出了项目依赖的所有外部库。每个依赖项都指定了其坐标(groupId,artifactId,version))depencymanagement(用于集中管理依赖版本,确保所有子模块使用相同的依赖版本,用于解决jar包依赖其他jar包产生的版本冲突</div> </li> <li><a href="/article/1947424006911094784.htm" title="【设计模式&C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)" target="_blank">【设计模式&C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)</a> <span class="text-muted"></span> <div>是一种创建型设计模式。特点是解耦客户端对对象的创建,使用抽象的工厂类,让类的扩展更加容易,相比简单工厂模式更具有灵活性和扩展性。优点:工厂方法模式将对象的创建与使用分开,使客户端代码无需关心对象是如何创建的;扩展性强,且符合开闭原则。需要添加新的实现类时,无需修改原有代码,只需添加一个相应的工厂类即可;支持多态,在运行时子类可以被替换,从而支持多态编程;易于修改和维护;易于管理复杂的创建逻辑。缺点</div> </li> <li><a href="/article/1947417065220534272.htm" title="xLua热更新解决方案知识点汇总" target="_blank">xLua热更新解决方案知识点汇总</a> <span class="text-muted">窗外听轩雨</span> <a class="tag" taget="_blank" href="/search/Lua%E7%83%AD%E6%9B%B4%E6%96%B0/1.htm">Lua热更新</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/unity3d/1.htm">unity3d</a> <div>XLua热更新解决方案知识点汇总文章目录XLua热更新解决方案知识点汇总前言热更新的本质C#CallLua相关知识点Lua解析器:LuaEnvC#获取Lua的基础类型C#获取Lua的全局函数functionC#获取Lua的表TableLuaCallC#相关知识点程序主入口Lua调用C#的类Lua调用C#枚举Lua调用C#的数组Lua调用C#的ListLua调用C#的DictionaryLua调用C</div> </li> <li><a href="/article/1947415551999537152.htm" title="XLua个人学习——C#访问Lua" target="_blank">XLua个人学习——C#访问Lua</a> <span class="text-muted">一枚骰子</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/xLua/1.htm">xLua</a> <div>目录0.引言1.访问基本数据类型全局变量2.访问全局的table2.1.映射到class或struct2.2.映射到一个interface2.3.映射到List、Dictionary2.4.映射到LuaTable类3.访问全局函数3.1映射到delegate3.2映射到LuaFunction4.官方使用建议0.引言本文是个人学习xLua中C#访问Lua的一些知识点总结。参考教程的是官方教程:xLu</div> </li> <li><a href="/article/1947330598683078656.htm" title="某易云音乐获取" target="_blank">某易云音乐获取</a> <span class="text-muted">我愿与你相伴</span> <a class="tag" taget="_blank" href="/search/python%E7%88%AC%E5%8F%96%E6%95%99%E7%A8%8B/1.htm">python爬取教程</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>importosimportrequestsfromlxmlimportetreeheaders={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/121.0.0.0Safari/537.36','Cookie':'_iuqxldmzr_=32;WEVNSM=1.</div> </li> <li><a href="/article/1947327822682976256.htm" title="c#集合排序" target="_blank">c#集合排序</a> <span class="text-muted">zls365365</span> <a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在C#中,集合排序是一种常见的操作,它可以帮助我们对集合中的元素进行排序。C#中提供了多种集合排序方法,包括Array.Sort、List.Sort、SortedList和SortedSet等。下面分别介绍一下这些集合排序方法的用法和注意事项:1.Array.SortArray.Sort是C#中的数组排序方法,可以对数组中的元素进行排序。Array.Sort方法可以使用默认的排序算法或者自定义的排</div> </li> <li><a href="/article/1947327569040830464.htm" title="Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现打架检测(C#代码,UI界面版)" target="_blank">Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现打架检测(C#代码,UI界面版)</a> <span class="text-muted">格林威</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%B8%9A%E7%9B%B8%E6%9C%BA/1.htm">工业相机</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89/1.htm">机器视觉</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现打架检测(C#代码,UI界面版)工业相机使用YoloV8模型实现打架检测工业相机通过YoloV8模型实现打架检测的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入YoloV8模型重要核心代码代码实现</div> </li> <li><a href="/article/1947327570521419776.htm" title="C# 读取文件内容的全面指南:从基础到高级技术" target="_blank">C# 读取文件内容的全面指南:从基础到高级技术</a> <span class="text-muted">梦幻南瓜</span> <a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录引言1.基础文件读取方法1.1File.ReadAllText-最简单的一次性读取1.2File.ReadAllLines-按行读取为数组1.3File.ReadAllBytes-二进制文件读取2.流式读取方法2.1StreamReader基础用法2.2指定编码方式2.3二进制流读取3.高级文件读取技术3.1异步文件读取3.2内存映射文件(Memory-MappedFiles)3.3管道(Pi</div> </li> <li><a href="/article/1947327442708393984.htm" title="Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人脸识别检测(C#代码,UI界面版)" target="_blank">Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人脸识别检测(C#代码,UI界面版)</a> <span class="text-muted">格林威</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89/1.htm">机器视觉</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%B8%9A%E7%9B%B8%E6%9C%BA/1.htm">工业相机</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E8%A7%89%E6%A3%80%E6%B5%8B/1.htm">视觉检测</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人脸识别检测(C#代码,UI界面版)工业相机使用YoloV8模型实现人脸的检测工业相机通过YoloV8模型实现人脸识别检测的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入YoloV8模型重要核心代</div> </li> <li><a href="/article/1947327315990081536.htm" title="c#泛型集合(ArrayList和List、Dictionary的对比)" target="_blank">c#泛型集合(ArrayList和List、Dictionary的对比)</a> <span class="text-muted"></span> <div>一、List集合1.基本概念泛型集合:只能存储指定类型的数据,类型安全。动态扩容:无需指定初始大小,自动调整容量。性能优势:避免装箱拆箱(相比ArrayList)。2.创建与初始化//空列表Listlist=newList();​//带初始值的列表Listlist4=newList{"aaa","ccc","bbb"};3.常用属性与方法操作代码示例说明添加元素list.Add(100);在末尾添</div> </li> <li><a href="/article/1947327316485009408.htm" title="Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人物识别(C#代码,UI界面版)" target="_blank">Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人物识别(C#代码,UI界面版)</a> <span class="text-muted">格林威</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%B8%9A%E7%9B%B8%E6%9C%BA/1.htm">工业相机</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89/1.htm">机器视觉</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人物识别(C#代码,UI界面版)工业相机使用YoloV8模型实现人物识别工业相机实现YoloV8模型实现人物识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入YoloV8模型重要核心代码代码实现</div> </li> <li><a href="/article/1947327189615702016.htm" title="C# 代码(`Hashtable` 和 `SortedList`)" target="_blank">C# 代码(`Hashtable` 和 `SortedList`)</a> <span class="text-muted">张謹礧</span> <a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%93%88%E5%B8%8C%E7%AE%97%E6%B3%95/1.htm">哈希算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、Hashtable(哈希表)1.基本概念非泛型集合:存储键值对(object类型),通过哈希算法实现快速查找。线程安全:默认非线程安全,可通过Hashtable.Synchronized创建线程安全版本。键的唯一性:键必须唯一,且不可为null(值可为null)。2.创建与初始化//创建空的HashtableHashtablehashtable=newHashtable();​//创建并初始化</div> </li> <li><a href="/article/1947317355029786624.htm" title="Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现动物分类(C#源码,UI界面版)" target="_blank">Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现动物分类(C#源码,UI界面版)</a> <span class="text-muted">格林威</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89/1.htm">机器视觉</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%B8%9A%E7%9B%B8%E6%9C%BA/1.htm">工业相机</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E8%A7%89%E6%A3%80%E6%B5%8B/1.htm">视觉检测</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现动物分类(C#源码,UI界面版))工业相机使用YoloV8模型实现动物分类工业相机实现YoloV8模型实现动物分类的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格式和Mat图像重要核心代码本地文件图像转换Bitmap图像格式和Mat图像重要核心代码Mat图像导入YoloV8模型重要核心代码代码实</div> </li> <li><a href="/article/1947317102750789632.htm" title="C#`Array`进阶" target="_blank">C#`Array`进阶</a> <span class="text-muted">张謹礧</span> <a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>一、数组方法进阶(Array类核心方法解析)该部分主要介绍Array类的静态方法与实例方法,核心是高阶函数(参数为函数的方法)的应用,通过回调函数实现灵活的数组查询与操作。1.核心静态方法(Array.XXX)静态方法需通过Array类直接调用,主要用于数组查询、判断、遍历等,参数常包含“回调函数”(定义查询条件)。方法作用关键参数示例场景Find从前向后查找第一个满足条件的元素数组+回调函数(返</div> </li> <li><a href="/article/1947309288703717376.htm" title="【C#】Vscode中C#工程如何引用自编写的dll" target="_blank">【C#】Vscode中C#工程如何引用自编写的dll</a> <span class="text-muted"></span> <div>如题问了几个AI,最后实验出来这个说的对,实际效果也是可以的,修改完csproj,关闭文件夹重新打开工程即可在VisualStudioCode中使用C#项目添加自定义DLL动态链接库的步骤如下:通过修改.csproj文件将DLL文件放入项目目录在项目根目录创建lib文件夹(或其他名称)将你的YourLibrary.dll放入此文件夹编辑项目文件(.csproj)打开项目文件(如YourProjec</div> </li> <li><a href="/article/1947281056675721216.htm" title="9.IEnumerable可枚举接口 C#例子 WPF例子" target="_blank">9.IEnumerable可枚举接口 C#例子 WPF例子</a> <span class="text-muted">军训猫猫头</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BD%E6%96%87%E7%AB%A0/1.htm">华丽文章</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/microsoft/1.htm">microsoft</a> <div>privateasyncvoidButton_Click(objectsender,RoutedEventArgse){//调用时可以传入List、Array、HashSet等任何实现了IEnumerable的集合ListmyList=newList{"A","B"};ProcessItems(myList);string[]myArray={"X","Y"};ProcessItems(myArr</div> </li> <li><a href="/article/1947259751599501312.htm" title="C#程序唯一性守护:用互斥锁(Mutex)实现进程级安全控制的实战指南" target="_blank">C#程序唯一性守护:用互斥锁(Mutex)实现进程级安全控制的实战指南</a> <span class="text-muted"></span> <div>为什么程序重复启动是个"毒瘤"?在软件开发中,程序重复启动可能导致以下灾难性后果:资源冲突:多个实例争夺数据库连接、文件句柄等有限资源数据污染:并发写入配置文件导致内容错乱界面混乱:多个窗口同时弹出,用户体验崩坏安全漏洞:恶意程序通过伪造实例窃取数据而互斥锁(Mutex)是Windows/Linux系统提供的原生机制,能完美解决这些问题。相比文件锁、注册表标记等传统方案,Mutex具有以下不可替代</div> </li> <li><a href="/article/1947256098440409088.htm" title="C# 委托与事件:从函数指针到事件驱动的终极指南" target="_blank">C# 委托与事件:从函数指针到事件驱动的终极指南</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/C%23%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/1.htm">C#学习资料</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>**为什么说委托与事件是C#的“灵魂”?**在C#的世界里,委托(Delegate)与事件(Event)是两个看似简单却深藏玄机的核心概念。你是否曾想过:一个按钮点击事件背后,是如何将“点击动作”与“响应方法”无缝连接的?你是否遇到过:需要动态传递方法、实现回调或构建观察者模式时的“无从下手”?你是否渴望:掌握一套完整的“异步通信”机制,用于构建高内聚、低耦合的系统?答案来了:✅委托是“方法的容器</div> </li> <li><a href="/article/1947238693446152192.htm" title="c#:TCP服务端管理类" target="_blank">c#:TCP服务端管理类</a> <span class="text-muted">妮妮学代码</span> <a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>TCP客户端连接多个服务端的类1.架构图2.创建TCP客户端与服务端通信的工具类注:TcpClientAsyncTool类中是客户端连接服务端的,TcpClient实质是Server,套用服务端连接客户端的,使用过程中自行修改名称,本案例暂未修改。连接使用异步操作,其余为同步执行的。publicclassTcpClientAsyncTool{privateTcpClient_tcpClient;p</div> </li> <li><a href="/article/1947237559411208192.htm" title="C#软件开发规范:从代码到实践的全面指南" target="_blank">C#软件开发规范:从代码到实践的全面指南</a> <span class="text-muted">jie sherry</span> <div>本文还有配套的精品资源,点击获取简介:《C#经典软件开发规范》详细介绍了在企业中实行软件开发的最佳实践,包括编码、设计、文档和测试等方面。该规范着重于提升代码质量、可维护性和团队效率。关键知识点包括命名规范、注释规范、代码结构、异常处理、错误检查、代码简洁性、单元测试、版本控制、设计模式、代码审查、性能优化、并发与多线程、日志记录、安全性和持续集成/部署(CI/CD)。遵循这些规范有助于创建健壮的</div> </li> <li><a href="/article/1947231381524377600.htm" title="框架技术SpringBoot ---SpringBoot集成Mybatis" target="_blank">框架技术SpringBoot ---SpringBoot集成Mybatis</a> <span class="text-muted">码农C风</span> <a class="tag" taget="_blank" href="/search/JAVAweb/1.htm">JAVAweb</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java-ee/1.htm">java-ee</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>SpringBoot框架内容管理ORM操作MySQLSpringBoot集成Mybaits步骤第一种方式:@Mapper注解第二种方式:@MapperScandao和xml文件分开---yml中配置事务txSpringBoot使用事务业务方法加入@Transactional;同时主启动类加上@TransactionManagerSpringBoot框架整合持久层框架,Mybatis前面已经分享了S</div> </li> <li><a href="/article/1947195704258654208.htm" title="Unity 常见数据结构分析与实战展示 C#" target="_blank">Unity 常见数据结构分析与实战展示 C#</a> <span class="text-muted">与火星的孩子对话</span> <a class="tag" taget="_blank" href="/search/Unity%E7%90%86%E8%AE%BA%E4%B8%8E%E5%AE%9E%E6%88%98/1.htm">Unity理论与实战</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>Unity常见数据结构分析与实战展示提示:内容纯个人编写,欢迎评论点赞,来指正我。文章目录Unity常见数据结构分析与实战展示1.引言2.Unity数据结构概述3.常见数据结构1.数组(Array)2.列表(List)3.字典(Dictionary)4.队列(Queue)5.栈(Stack)4.实战案例分析案例1:游戏对象管理案例2:事件系统实现案例3:AI行为树5.最佳实践与建议6.总结1.引言</div> </li> <li><a href="/article/28.htm" title="如何用ruby来写hadoop的mapreduce并生成jar包" target="_blank">如何用ruby来写hadoop的mapreduce并生成jar包</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a> <div>ruby来写hadoop的mapreduce,我用的方法是rubydoop。怎么配置环境呢: 1.安装rvm:     不说了 网上有 2.安装ruby:     由于我以前是做ruby的,所以习惯性的先安装了ruby,起码调试起来比jruby快多了。 3.安装jruby:     rvm install jruby然后等待安</div> </li> <li><a href="/article/155.htm" title="java编程思想 -- 访问控制权限" target="_blank">java编程思想 -- 访问控制权限</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9D%83%E9%99%90/1.htm">访问控制权限</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a> <div>访问权限是java中一个比较中要的知识点,它规定者什么方法可以访问,什么不可以访问   一:包访问权限;   自定义包: package com.wj.control; //包 public class Demo { //定义一个无参的方法 public void DemoPackage(){ System.out.println("调用</div> </li> <li><a href="/article/282.htm" title="[生物与医学]请审慎食用小龙虾" target="_blank">[生物与医学]请审慎食用小龙虾</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9/1.htm">生物</a> <div>      现在的餐馆里面出售的小龙虾,有一些是在野外捕捉的,这些小龙虾身体里面可能带有某些病毒和细菌,人食用以后可能会导致一些疾病,严重的甚至会死亡.....      所以,参加聚餐的时候,最好不要点小龙虾...就吃养殖的猪肉,牛肉,羊肉和鱼,等动物蛋白质     </div> </li> <li><a href="/article/409.htm" title="org.apache.jasper.JasperException: Unable to compile class for JSP:" target="_blank">org.apache.jasper.JasperException: Unable to compile class for JSP:</a> <span class="text-muted">商人shang</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/2.2/1.htm">2.2</a><a class="tag" taget="_blank" href="/search/jdk1.8/1.htm">jdk1.8</a> <div>环境: jdk1.8    maven  tomcat7-maven-plugin  2.0 原因: tomcat7-maven-plugin  2.0 不知吃 jdk 1.8,换成 tomcat7-maven-plugin  2.2就行,即     <plugin> </div> </li> <li><a href="/article/536.htm" title="你的垃圾你处理掉了吗?GC" target="_blank">你的垃圾你处理掉了吗?GC</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/GC/1.htm">GC</a> <div>前序:本人菜鸟,此文研究学习来自网络,各位牛牛多指教  1.垃圾收集算法的核心思想   Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。   垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别</div> </li> <li><a href="/article/663.htm" title="shiro 和 SESSSION" target="_blank">shiro 和 SESSSION</a> <span class="text-muted">杨白白</span> <a class="tag" taget="_blank" href="/search/shiro/1.htm">shiro</a> <div>shiro 在web项目里默认使用的是web容器提供的session,也就是说shiro使用的session是web容器产生的,并不是自己产生的,在用于非web环境时可用其他来源代替。在web工程启动的时候它就和容器绑定在了一起,这是通过web.xml里面的shiroFilter实现的。通过session.getSession()方法会在浏览器cokkice产生JESSIONID,当关闭浏览器,此</div> </li> <li><a href="/article/790.htm" title="移动互联网终端 淘宝客如何实现盈利" target="_blank">移动互联网终端 淘宝客如何实现盈利</a> <span class="text-muted">小桔子</span> <a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8B%95%E5%AE%A2%E6%88%B6%E7%AB%AF/1.htm">移動客戶端</a><a class="tag" taget="_blank" href="/search/%E6%B7%98%E5%AE%A2/1.htm">淘客</a><a class="tag" taget="_blank" href="/search/%E6%B7%98%E5%AF%B6App/1.htm">淘寶App</a> <div>       2012年淘宝联盟平台为站长和淘宝客带来的分成收入突破30亿元,同比增长100%。而来自移动端的分成达1亿元,其中美丽说、蘑菇街、果库、口袋购物等App运营商分成近5000万元。 可以看出,虽然目前阶段PC端对于淘客而言仍旧是盈利的大头,但移动端已经呈现出爆发之势。而且这个势头将随着智能终端(手机,平板)的加速普及而更加迅猛</div> </li> <li><a href="/article/917.htm" title="wordpress小工具制作" target="_blank">wordpress小工具制作</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/wordpress/1.htm">wordpress</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E5%B7%A5%E5%85%B7/1.htm">小工具</a> <div>wordpress 使用侧边栏的小工具,很方便调整页面结构 小工具的制作过程 1 在自己的主题文件中新建一个文件夹(如widget),在文件夹中创建一个php(AWP_posts-category.php) 小工具是一个类,想侧边栏一样,还得使用代码注册,他才可以再后台使用,基本的代码一层不变 <?php class AWP_Post_Category extends WP_Wi</div> </li> <li><a href="/article/1044.htm" title="JS微信分享" target="_blank">JS微信分享</a> <span class="text-muted">AILIKES</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a> <div>// 所有功能必须包含在 WeixinApi.ready 中进行    WeixinApi.ready(function(Api) {        // 微信分享的数据            var wxData = {       &nb</div> </li> <li><a href="/article/1171.htm" title="封装探讨" target="_blank">封装探讨</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/JAVA%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1+%E5%B0%81%E8%A3%85/1.htm">JAVA面向对象 封装</a> <div>//封装   属性 方法 将某些东西包装在一起,通过创建对象或使用静态的方法来调用,称为封装;封装其实就是有选择性地公开或隐藏某些信息,它解决了数据的安全性问题,增加代码的可读性和可维护性   在 Aname类中申明三个属性,将其封装在一个类中:通过对象来调用   例如   1: //属性 将其设为私有 姓名 name 可以公开 </div> </li> <li><a href="/article/1298.htm" title="jquery radio/checkbox change事件不能触发的问题" target="_blank">jquery radio/checkbox change事件不能触发的问题</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>我想让radio来控制当前我选择的是机动车还是特种车,如下所示:  <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"><</div> </li> <li><a href="/article/1425.htm" title="AngularJS中安全性措施" target="_blank">AngularJS中安全性措施</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E6%80%A7/1.htm">安全性</a><a class="tag" taget="_blank" href="/search/XSRF/1.htm">XSRF</a><a class="tag" taget="_blank" href="/search/JSON%E6%BC%8F%E6%B4%9E/1.htm">JSON漏洞</a> <div>        在使用web应用中,安全性是应该首要考虑的一个问题。AngularJS提供了一些辅助机制,用来防护来自两个常见攻击方向的网络攻击。 一.JSON漏洞         当使用一个GET请求获取JSON数组信息的时候(尤其是当这一信息非常敏感,</div> </li> <li><a href="/article/1552.htm" title="[Maven学习笔记九]Maven发布web项目" target="_blank">[Maven学习笔记九]Maven发布web项目</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>基于Maven的web项目的标准项目结构 user-project     user-core     user-service     user-web        src      </div> </li> <li><a href="/article/1679.htm" title="【Hive七】Hive用户自定义聚合函数(UDAF)" target="_blank">【Hive七】Hive用户自定义聚合函数(UDAF)</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a> <div>用户自定义聚合函数,用户提供的多个入参通过聚合计算(求和、求最大值、求最小值)得到一个聚合计算结果的函数。 问题:UDF也可以提供输入多个参数然后输出一个结果的运算,比如加法运算add(3,5),add这个UDF需要实现UDF的evaluate方法,那么UDF和UDAF的实质分别究竟是什么?   Double evaluate(Double a, Double b)  </div> </li> <li><a href="/article/1806.htm" title="通过 nginx-lua 给 Nginx 增加 OAuth 支持" target="_blank">通过 nginx-lua 给 Nginx 增加 OAuth 支持</a> <span class="text-muted">ronin47</span> <div>前言:我们使用Nginx的Lua中间件建立了OAuth2认证和授权层。如果你也有此打算,阅读下面的文档,实现自动化并获得收益。SeatGeek 在过去几年中取得了发展,我们已经积累了不少针对各种任务的不同管理接口。我们通常为新的展示需求创建新模块,比如我们自己的博客、图表等。我们还定期开发内部工具来处理诸如部署、可视化操作及事件处理等事务。在处理这些事务中,我们使用了几个不同的接口来认证: &n</div> </li> <li><a href="/article/1933.htm" title="利用tomcat-redis-session-manager做session同步时自定义类对象属性保存不上的解决方法" target="_blank">利用tomcat-redis-session-manager做session同步时自定义类对象属性保存不上的解决方法</a> <span class="text-muted">bsr1983</span> <a class="tag" taget="_blank" href="/search/session/1.htm">session</a> <div>在利用tomcat-redis-session-manager做session同步时,遇到了在session保存一个自定义对象时,修改该对象中的某个属性,session未进行序列化,属性没有被存储到redis中。 在 tomcat-redis-session-manager的github上有如下说明: Session Change Tracking As noted in the &qu</div> </li> <li><a href="/article/2060.htm" title="《代码大全》表驱动法-Table Driven Approach-1" target="_blank">《代码大全》表驱动法-Table Driven Approach-1</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>关于Table Driven Approach的一篇非常好的文章: http://www.codeproject.com/Articles/42732/Table-driven-Approach package com.ljn.base; import java.util.Random; public class TableDriven { public </div> </li> <li><a href="/article/2187.htm" title="Sybase封锁原理" target="_blank">Sybase封锁原理</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/Sybase/1.htm">Sybase</a> <div>       昨天在操作Sybase IQ12.7时意外操作造成了数据库表锁定,不能删除被锁定表数据也不能往其中写入数据。由于着急往该表抽入数据,因此立马着手解决该表的解锁问题。     无奈此前没有接触过Sybase IQ12.7这套数据库产品,加之当时已属于下班时间无法求助于支持人员支持,因此只有借助搜索引擎强大的</div> </li> <li><a href="/article/2314.htm" title="java异常处理机制" target="_blank">java异常处理机制</a> <span class="text-muted">CrazyMizzz</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>java异常关键字有以下几个,分别为 try catch final throw throws 他们的定义分别为 try:    Opening exception-handling statement. catch:  Captures the exception. finally: Runs its code before terminating</div> </li> <li><a href="/article/2441.htm" title="hive 数据插入DML语法汇总" target="_blank">hive 数据插入DML语法汇总</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/DML/1.htm">DML</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8F%92%E5%85%A5/1.htm">数据插入</a> <div>Hive的数据插入DML语法汇总1、Loading files into tables语法:1) LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]解释:1)、上面命令执行环境为hive客户端环境下: hive>l</div> </li> <li><a href="/article/2568.htm" title="工厂设计模式" target="_blank">工厂设计模式</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>  使用设计模式是促进最佳实践和良好设计的好办法。设计模式可以提供针对常见的编程问题的灵活的解决方案。 工厂模式 工厂模式(Factory)允许你在代码执行时实例化对象。它之所以被称为工厂模式是因为它负责“生产”对象。工厂方法的参数是你要生成的对象对应的类名称。 Example #1 调用工厂方法(带参数) <?phpclass Example{ </div> </li> <li><a href="/article/2695.htm" title="mysql字符串查找函数" target="_blank">mysql字符串查找函数</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>  FIND_IN_SET(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在1到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或st</div> </li> <li><a href="/article/2822.htm" title="jvm内存管理" target="_blank">jvm内存管理</a> <span class="text-muted">easterfly</span> <a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>一、JVM堆内存的划分 分为年轻代和年老代。年轻代又分为三部分:一个eden,两个survivor。 工作过程是这样的:e区空间满了后,执行minor gc,存活下来的对象放入s0, 对s0仍会进行minor gc,存活下来的的对象放入s1中,对s1同样执行minor gc,依旧存活的对象就放入年老代中; 年老代满了之后会执行major gc,这个是stop the word模式,执行</div> </li> <li><a href="/article/2949.htm" title="CentOS-6.3安装配置JDK-8" target="_blank">CentOS-6.3安装配置JDK-8</a> <span class="text-muted">gengzg</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>JAVA_HOME=/usr/java/jdk1.8.0_45 JRE_HOME=/usr/java/jdk1.8.0_45/jre PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export JAVA_HOME</div> </li> <li><a href="/article/3076.htm" title="【转】关于web路径的获取方法" target="_blank">【转】关于web路径的获取方法</a> <span class="text-muted">huangyc1210</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E8%B7%AF%E5%BE%84/1.htm">路径</a> <div>假定你的web application 名称为news,你在浏览器中输入请求路径:  http://localhost:8080/news/main/list.jsp  则执行下面向行代码后打印出如下结果:  1、 System.out.println(request.getContextPath()); //可返回站点的根路径。也就是项</div> </li> <li><a href="/article/3203.htm" title="php里获取第一个中文首字母并排序" target="_blank">php里获取第一个中文首字母并排序</a> <span class="text-muted">远去的渡口</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>很久没来更新博客了,还是觉得工作需要多总结的好。今天来更新一个自己认为比较有成就的问题吧。 最近在做储值结算,需求里结算首页需要按门店的首字母A-Z排序。我的数据结构原本是这样的: Array ( [0] => Array ( [sid] => 2885842 [recetcstoredpay] =&g</div> </li> <li><a href="/article/3330.htm" title="java内部类" target="_blank">java内部类</a> <span class="text-muted">hm4123660</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E9%83%A8%E7%B1%BB/1.htm">内部类</a><a class="tag" taget="_blank" href="/search/%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB/1.htm">匿名内部类</a><a class="tag" taget="_blank" href="/search/%E6%88%90%E5%91%98%E5%86%85%E9%83%A8%E7%B1%BB/1.htm">成员内部类</a><a class="tag" taget="_blank" href="/search/%E6%96%B9%E6%B3%95%E5%86%85%E9%83%A8%E7%B1%BB/1.htm">方法内部类</a> <div>      在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。内部类可以间接解决多继承问题,可以使用内部类继承一个类,外部类继承一个类,实现多继承。      &nb</div> </li> <li><a href="/article/3457.htm" title="Caused by: java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.Exten" target="_blank">Caused by: java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.Exten</a> <span class="text-muted">zhb8015</span> <div>maven pom.xml关于hibernate的配置和异常信息如下,查了好多资料,问题还是没有解决。只知道是包冲突,就是不知道是哪个包....遇到这个问题的分享下是怎么解决的。。   maven pom:   <dependency> <groupId>org.hibernate</groupId> <ar</div> </li> <li><a href="/article/3584.htm" title="Spark 性能相关参数配置详解-任务调度篇" target="_blank">Spark 性能相关参数配置详解-任务调度篇</a> <span class="text-muted">Stark_Summer</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a><a class="tag" taget="_blank" href="/search/cpu/1.htm">cpu</a><a class="tag" taget="_blank" href="/search/%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6/1.htm">任务调度</a><a class="tag" taget="_blank" href="/search/yarn/1.htm">yarn</a> <div>随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化。   由于篇幅较长,所以在这里分篇组织,如果要看最新完整的网页版内容,可以戳这里:http://spark-config.readthedocs.org/,主要是便</div> </li> <li><a href="/article/3711.htm" title="css3滤镜" target="_blank">css3滤镜</a> <span class="text-muted">wangkeheng</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>经常看到一些网站的底部有一些灰色的图标,鼠标移入的时候会变亮,开始以为是js操作src或者bg呢,搜索了一下,发现了一个更好的方法:通过css3的滤镜方法。 html代码: <a href='' class='icon'><img src='utv.jpg' /></a> css代码: .icon{-webkit-filter: graysc</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>